mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-03 13:40:39 +01:00
cli: split tracking of meta data out of NmcOutputField
When generating output data, nmcli iterates over a list of property-descriptors (nmc_fields_ip4_config), creates an intermediate array (output_data) and finally prints it. However, previously both the meta data (nmc_fields_ip4_config) and the intermediate format use the same type NmcOutputField. This means, certain fields are relevant to describe a property, and other fields are output/formatting fields. Split this up. Now, the meta data is tracked in form of an NMMetaAbstractInfo lists. This separates the information about properties from intermediate steps during creation of the output. Note that currently functions like print_ip4_config() still have all the knowledge about how to generate the output. That is wrong, instead, the meta data (NMMetaAbstractInfo) should describe how to create the output and then all those functions could be replaced. This means, later we want to add more knowledge to the NMMetaAbstractInfo, so it is important to keep them separate from NmcOutputField.
This commit is contained in:
parent
6a489199b9
commit
bfb9fd0d2f
16 changed files with 788 additions and 890 deletions
|
|
@ -37,49 +37,38 @@
|
|||
|
||||
extern GMainLoop *loop;
|
||||
|
||||
#define OUTPUT_FIELD_WITH_NAME(n) { .name = N_ (n), }
|
||||
|
||||
/* Available fields for IPv4 group */
|
||||
NmcOutputField nmc_fields_ip4_config[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("GROUP"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ADDRESS"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("GATEWAY"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ROUTE"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DNS"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DOMAIN"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WINS"), /* 6 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_ip4_config[] = {
|
||||
NMC_META_GENERIC ("GROUP"), /* 0 */
|
||||
NMC_META_GENERIC ("ADDRESS"), /* 1 */
|
||||
NMC_META_GENERIC ("GATEWAY"), /* 2 */
|
||||
NMC_META_GENERIC ("ROUTE"), /* 3 */
|
||||
NMC_META_GENERIC ("DNS"), /* 4 */
|
||||
NMC_META_GENERIC ("DOMAIN"), /* 5 */
|
||||
NMC_META_GENERIC ("WINS"), /* 6 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_IP4_CONFIG_ALL "GROUP,ADDRESS,GATEWAY,ROUTE,DNS,DOMAIN,WINS"
|
||||
|
||||
/* Available fields for DHCPv4 group */
|
||||
NmcOutputField nmc_fields_dhcp4_config[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("GROUP"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("OPTION"), /* 1 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dhcp4_config[] = {
|
||||
NMC_META_GENERIC ("GROUP"), /* 0 */
|
||||
NMC_META_GENERIC ("OPTION"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DHCP4_CONFIG_ALL "GROUP,OPTION"
|
||||
|
||||
/* Available fields for IPv6 group */
|
||||
NmcOutputField nmc_fields_ip6_config[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("GROUP"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ADDRESS"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("GATEWAY"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ROUTE"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DNS"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DOMAIN"), /* 5 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_ip6_config[] = {
|
||||
NMC_META_GENERIC ("GROUP"), /* 0 */
|
||||
NMC_META_GENERIC ("ADDRESS"), /* 1 */
|
||||
NMC_META_GENERIC ("GATEWAY"), /* 2 */
|
||||
NMC_META_GENERIC ("ROUTE"), /* 3 */
|
||||
NMC_META_GENERIC ("DNS"), /* 4 */
|
||||
NMC_META_GENERIC ("DOMAIN"), /* 5 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_IP6_CONFIG_ALL "GROUP,ADDRESS,GATEWAY,ROUTE,DNS,DOMAIN"
|
||||
|
||||
/* Available fields for DHCPv6 group */
|
||||
NmcOutputField nmc_fields_dhcp6_config[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("GROUP"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("OPTION"), /* 1 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dhcp6_config[] = {
|
||||
NMC_META_GENERIC ("GROUP"), /* 0 */
|
||||
NMC_META_GENERIC ("OPTION"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DHCP6_CONFIG_ALL "GROUP,OPTION"
|
||||
|
||||
|
||||
gboolean
|
||||
print_ip4_config (NMIPConfig *cfg4,
|
||||
|
|
@ -94,18 +83,17 @@ print_ip4_config (NMIPConfig *cfg4,
|
|||
char **domain_arr = NULL;
|
||||
char **wins_arr = NULL;
|
||||
int i = 0;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (cfg4 == NULL)
|
||||
return FALSE;
|
||||
|
||||
tmpl = nmc_fields_ip4_config;
|
||||
tmpl_len = sizeof (nmc_fields_ip4_config);
|
||||
out_indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_IP4_CONFIG_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_ip4_config;
|
||||
out_indices = parse_output_fields (one_field,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
/* addresses */
|
||||
|
|
@ -153,7 +141,7 @@ print_ip4_config (NMIPConfig *cfg4,
|
|||
/* WINS */
|
||||
wins_arr = g_strdupv ((char **) nm_ip_config_get_wins_servers (cfg4));
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, group_prefix);
|
||||
set_val_arr (arr, 1, addr_arr);
|
||||
set_val_strc (arr, 2, nm_ip_config_get_gateway (cfg4));
|
||||
|
|
@ -181,18 +169,17 @@ print_ip6_config (NMIPConfig *cfg6,
|
|||
char **dns_arr = NULL;
|
||||
char **domain_arr = NULL;
|
||||
int i = 0;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (cfg6 == NULL)
|
||||
return FALSE;
|
||||
|
||||
tmpl = nmc_fields_ip6_config;
|
||||
tmpl_len = sizeof (nmc_fields_ip6_config);
|
||||
out_indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_IP6_CONFIG_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_ip6_config;
|
||||
out_indices = parse_output_fields (one_field,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
/* addresses */
|
||||
|
|
@ -237,7 +224,7 @@ print_ip6_config (NMIPConfig *cfg6,
|
|||
/* domains */
|
||||
domain_arr = g_strdupv ((char **) nm_ip_config_get_domains (cfg6));
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, group_prefix);
|
||||
set_val_arr (arr, 1, addr_arr);
|
||||
set_val_strc (arr, 2, nm_ip_config_get_gateway (cfg6));
|
||||
|
|
@ -259,8 +246,8 @@ print_dhcp4_config (NMDhcpConfig *dhcp4,
|
|||
const char *one_field)
|
||||
{
|
||||
GHashTable *table;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
|
||||
if (dhcp4 == NULL)
|
||||
return FALSE;
|
||||
|
|
@ -273,11 +260,10 @@ print_dhcp4_config (NMDhcpConfig *dhcp4,
|
|||
int i = 0;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dhcp4_config;
|
||||
tmpl_len = sizeof (nmc_fields_dhcp4_config);
|
||||
out_indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DHCP4_CONFIG_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dhcp4_config;
|
||||
out_indices = parse_output_fields (one_field,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
options_arr = g_new (char *, g_hash_table_size (table) + 1);
|
||||
|
|
@ -286,7 +272,7 @@ print_dhcp4_config (NMDhcpConfig *dhcp4,
|
|||
options_arr[i++] = g_strdup_printf ("%s = %s", (char *) key, (char *) value);
|
||||
options_arr[i] = NULL;
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, group_prefix);
|
||||
set_val_arr (arr, 1, options_arr);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
@ -306,8 +292,8 @@ print_dhcp6_config (NMDhcpConfig *dhcp6,
|
|||
const char *one_field)
|
||||
{
|
||||
GHashTable *table;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
|
||||
if (dhcp6 == NULL)
|
||||
return FALSE;
|
||||
|
|
@ -320,11 +306,10 @@ print_dhcp6_config (NMDhcpConfig *dhcp6,
|
|||
int i = 0;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dhcp6_config;
|
||||
tmpl_len = sizeof (nmc_fields_dhcp6_config);
|
||||
out_indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DHCP6_CONFIG_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dhcp6_config;
|
||||
out_indices = parse_output_fields (one_field,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
options_arr = g_new (char *, g_hash_table_size (table) + 1);
|
||||
|
|
@ -333,7 +318,7 @@ print_dhcp6_config (NMDhcpConfig *dhcp6,
|
|||
options_arr[i++] = g_strdup_printf ("%s = %s", (char *) key, (char *) value);
|
||||
options_arr[i] = NULL;
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, group_prefix);
|
||||
set_val_arr (arr, 1, options_arr);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
|
|||
|
|
@ -80,9 +80,9 @@ void nmc_complete_bool (const char *prefix);
|
|||
|
||||
const char *nmc_error_get_simple_message (GError *error);
|
||||
|
||||
extern NmcOutputField nmc_fields_ip4_config[];
|
||||
extern NmcOutputField nmc_fields_dhcp4_config[];
|
||||
extern NmcOutputField nmc_fields_ip6_config[];
|
||||
extern NmcOutputField nmc_fields_dhcp6_config[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_ip4_config[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dhcp4_config[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_ip6_config[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dhcp6_config[];
|
||||
|
||||
#endif /* NMC_COMMON_H */
|
||||
|
|
|
|||
|
|
@ -39,9 +39,7 @@
|
|||
#include "nm-secret-agent-simple.h"
|
||||
#include "polkit-agent.h"
|
||||
#include "nm-vpn-helpers.h"
|
||||
|
||||
#define OUTPUT_FIELD_WITH_NAME(n) { .name = N_ (n), }
|
||||
#define OUTPUT_FIELD_WITH_FIELDS(n, fields) { .name = N_ (n), .group_list = fields + 1, }
|
||||
#include "nm-meta-setting-access.h"
|
||||
|
||||
typedef struct _OptionInfo OptionInfo;
|
||||
struct _OptionInfo {
|
||||
|
|
@ -130,70 +128,42 @@ struct _OptionInfo {
|
|||
|
||||
#define BASE_PROMPT "nmcli> "
|
||||
|
||||
/* Available fields for 'connection show' */
|
||||
NmcOutputField nmc_fields_con_show[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("UUID"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TYPE"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TIMESTAMP"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TIMESTAMP-REAL"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("AUTOCONNECT"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("AUTOCONNECT-PRIORITY"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("READONLY"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DBUS-PATH"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ACTIVE"), /* 9 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICE"), /* 10 */
|
||||
OUTPUT_FIELD_WITH_NAME ("STATE"), /* 11 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ACTIVE-PATH"), /* 12 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SLAVE"), /* 13 */
|
||||
{ 0 }
|
||||
/*****************************************************************************/
|
||||
|
||||
const NmcMetaGenericInfo *const nmc_fields_con_show[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("UUID"), /* 1 */
|
||||
NMC_META_GENERIC ("TYPE"), /* 2 */
|
||||
NMC_META_GENERIC ("TIMESTAMP"), /* 3 */
|
||||
NMC_META_GENERIC ("TIMESTAMP-REAL"), /* 4 */
|
||||
NMC_META_GENERIC ("AUTOCONNECT"), /* 5 */
|
||||
NMC_META_GENERIC ("AUTOCONNECT-PRIORITY"), /* 6 */
|
||||
NMC_META_GENERIC ("READONLY"), /* 7 */
|
||||
NMC_META_GENERIC ("DBUS-PATH"), /* 8 */
|
||||
NMC_META_GENERIC ("ACTIVE"), /* 9 */
|
||||
NMC_META_GENERIC ("DEVICE"), /* 10 */
|
||||
NMC_META_GENERIC ("STATE"), /* 11 */
|
||||
NMC_META_GENERIC ("ACTIVE-PATH"), /* 12 */
|
||||
NMC_META_GENERIC ("SLAVE"), /* 13 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_CON_SHOW_ALL "NAME,UUID,TYPE,TIMESTAMP,TIMESTAMP-REAL,AUTOCONNECT,AUTOCONNECT-PRIORITY,READONLY,DBUS-PATH,"\
|
||||
"ACTIVE,DEVICE,STATE,ACTIVE-PATH,SLAVE"
|
||||
#define NMC_FIELDS_CON_SHOW_COMMON "NAME,UUID,TYPE,DEVICE"
|
||||
|
||||
/* Helper macro to define fields */
|
||||
#define OUTPUT_FIELD_WITH_SETTING(setting, setting_type) \
|
||||
{ \
|
||||
.name = setting, \
|
||||
.setting_info = &nm_meta_setting_infos_editor[setting_type], \
|
||||
}
|
||||
|
||||
/* Available settings for 'connection show <con>' - profile part */
|
||||
NmcOutputField nmc_fields_settings_names[] = {
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_CONNECTION_SETTING_NAME, NM_META_SETTING_TYPE_CONNECTION), /* 0 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_WIRED_SETTING_NAME, NM_META_SETTING_TYPE_WIRED), /* 1 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_802_1X_SETTING_NAME, NM_META_SETTING_TYPE_802_1X), /* 2 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_WIRELESS_SETTING_NAME, NM_META_SETTING_TYPE_WIRELESS), /* 3 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, NM_META_SETTING_TYPE_WIRELESS_SECURITY), /* 4 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_META_SETTING_TYPE_IP4_CONFIG), /* 5 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_META_SETTING_TYPE_IP6_CONFIG), /* 6 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_SERIAL_SETTING_NAME, NM_META_SETTING_TYPE_SERIAL), /* 7 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_PPP_SETTING_NAME, NM_META_SETTING_TYPE_PPP), /* 8 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_PPPOE_SETTING_NAME, NM_META_SETTING_TYPE_PPPOE), /* 9 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_GSM_SETTING_NAME, NM_META_SETTING_TYPE_GSM), /* 10 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_CDMA_SETTING_NAME, NM_META_SETTING_TYPE_CDMA), /* 11 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_BLUETOOTH_SETTING_NAME, NM_META_SETTING_TYPE_BLUETOOTH), /* 12 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_OLPC_MESH_SETTING_NAME, NM_META_SETTING_TYPE_OLPC_MESH), /* 13 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_VPN_SETTING_NAME, NM_META_SETTING_TYPE_VPN), /* 14 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_WIMAX_SETTING_NAME, NM_META_SETTING_TYPE_WIMAX), /* 15 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_INFINIBAND_SETTING_NAME, NM_META_SETTING_TYPE_INFINIBAND), /* 16 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_BOND_SETTING_NAME, NM_META_SETTING_TYPE_BOND), /* 17 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_VLAN_SETTING_NAME, NM_META_SETTING_TYPE_VLAN), /* 18 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_ADSL_SETTING_NAME, NM_META_SETTING_TYPE_ADSL), /* 19 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_BRIDGE_SETTING_NAME, NM_META_SETTING_TYPE_BRIDGE), /* 20 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_BRIDGE_PORT_SETTING_NAME, NM_META_SETTING_TYPE_BRIDGE_PORT), /* 21 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_TEAM_SETTING_NAME, NM_META_SETTING_TYPE_TEAM), /* 22 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_TEAM_PORT_SETTING_NAME, NM_META_SETTING_TYPE_TEAM_PORT), /* 23 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_DCB_SETTING_NAME, NM_META_SETTING_TYPE_DCB), /* 24 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_TUN_SETTING_NAME, NM_META_SETTING_TYPE_TUN), /* 25 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_IP_TUNNEL_SETTING_NAME, NM_META_SETTING_TYPE_IP_TUNNEL), /* 26 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_MACSEC_SETTING_NAME, NM_META_SETTING_TYPE_MACSEC), /* 27 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_MACVLAN_SETTING_NAME, NM_META_SETTING_TYPE_MACVLAN), /* 28 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_VXLAN_SETTING_NAME, NM_META_SETTING_TYPE_VXLAN), /* 29 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_PROXY_SETTING_NAME, NM_META_SETTING_TYPE_PROXY), /* 30 */
|
||||
OUTPUT_FIELD_WITH_SETTING (NM_SETTING_DUMMY_SETTING_NAME, NM_META_SETTING_TYPE_DUMMY), /* 31 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_con_active_details_general[] = {
|
||||
NMC_META_GENERIC ("GROUP"), /* 0 */
|
||||
NMC_META_GENERIC ("NAME"), /* 1 */
|
||||
NMC_META_GENERIC ("UUID"), /* 2 */
|
||||
NMC_META_GENERIC ("DEVICES"), /* 3 */
|
||||
NMC_META_GENERIC ("STATE"), /* 4 */
|
||||
NMC_META_GENERIC ("DEFAULT"), /* 5 */
|
||||
NMC_META_GENERIC ("DEFAULT6"), /* 6 */
|
||||
NMC_META_GENERIC ("SPEC-OBJECT"), /* 7 */
|
||||
NMC_META_GENERIC ("VPN"), /* 8 */
|
||||
NMC_META_GENERIC ("DBUS-PATH"), /* 9 */
|
||||
NMC_META_GENERIC ("CON-PATH"), /* 10 */
|
||||
NMC_META_GENERIC ("ZONE"), /* 11 */
|
||||
NMC_META_GENERIC ("MASTER-PATH"), /* 12 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_SETTINGS_NAMES_ALL NM_SETTING_CONNECTION_SETTING_NAME","\
|
||||
NM_SETTING_WIRED_SETTING_NAME","\
|
||||
|
|
@ -228,59 +198,27 @@ NmcOutputField nmc_fields_settings_names[] = {
|
|||
// NM_SETTING_DUMMY_SETTING_NAME
|
||||
// NM_SETTING_WIMAX_SETTING_NAME
|
||||
|
||||
/* Active connection data */
|
||||
/* Available fields for GENERAL group */
|
||||
NmcOutputField nmc_fields_con_active_details_general[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("GROUP"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("UUID"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICES"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("STATE"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEFAULT"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEFAULT6"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SPEC-OBJECT"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("VPN"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DBUS-PATH"), /* 9 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CON-PATH"), /* 10 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ZONE"), /* 11 */
|
||||
OUTPUT_FIELD_WITH_NAME ("MASTER-PATH"), /* 12 */
|
||||
{ 0 }
|
||||
|
||||
const NmcMetaGenericInfo *const nmc_fields_con_active_details_vpn[] = {
|
||||
NMC_META_GENERIC ("GROUP"), /* 0 */
|
||||
NMC_META_GENERIC ("TYPE"), /* 1 */
|
||||
NMC_META_GENERIC ("USERNAME"), /* 2 */
|
||||
NMC_META_GENERIC ("GATEWAY"), /* 3 */
|
||||
NMC_META_GENERIC ("BANNER"), /* 4 */
|
||||
NMC_META_GENERIC ("VPN-STATE"), /* 5 */
|
||||
NMC_META_GENERIC ("CFG"), /* 6 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_CON_ACTIVE_DETAILS_GENERAL_ALL "GROUP,NAME,UUID,DEVICES,STATE,DEFAULT,DEFAULT6,"\
|
||||
"VPN,ZONE,DBUS-PATH,CON-PATH,SPEC-OBJECT,MASTER-PATH"
|
||||
|
||||
/* IP group is handled by common.c */
|
||||
|
||||
/* Available fields for VPN group */
|
||||
NmcOutputField nmc_fields_con_active_details_vpn[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("GROUP"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TYPE"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("USERNAME"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("GATEWAY"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("BANNER"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("VPN-STATE"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CFG"), /* 6 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[] = {
|
||||
NMC_META_GENERIC_WITH_NESTED ("GENERAL", nmc_fields_con_active_details_general + 1), /* 0 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("IP4", nmc_fields_ip4_config + 1), /* 1 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("DHCP4", nmc_fields_dhcp4_config + 1), /* 2 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("IP6", nmc_fields_ip6_config + 1), /* 3 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("DHCP6", nmc_fields_dhcp6_config + 1), /* 4 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("VPN", nmc_fields_con_active_details_vpn + 1), /* 5 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_CON_ACTIVE_DETAILS_VPN_ALL "GROUP,TYPE,USERNAME,GATEWAY,BANNER,VPN-STATE,CFG"
|
||||
|
||||
/* defined in common.c */
|
||||
extern NmcOutputField nmc_fields_ip4_config[];
|
||||
extern NmcOutputField nmc_fields_ip6_config[];
|
||||
extern NmcOutputField nmc_fields_dhcp4_config[];
|
||||
extern NmcOutputField nmc_fields_dhcp6_config[];
|
||||
|
||||
/* Available fields for 'connection show <con>' - active part */
|
||||
NmcOutputField nmc_fields_con_active_details_groups[] = {
|
||||
OUTPUT_FIELD_WITH_FIELDS ("GENERAL", nmc_fields_con_active_details_general), /* 0 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("IP4", nmc_fields_ip4_config), /* 1 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("DHCP4", nmc_fields_dhcp4_config), /* 2 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("IP6", nmc_fields_ip6_config), /* 3 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("DHCP6", nmc_fields_dhcp6_config), /* 4 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("VPN", nmc_fields_con_active_details_vpn), /* 5 */
|
||||
{ 0 }
|
||||
};
|
||||
#define NMC_FIELDS_CON_ACTIVE_DETAILS_ALL "GENERAL,IP4,DHCP4,IP6,DHCP6,VPN"
|
||||
|
||||
/* Pseudo group names for 'connection show <con>' */
|
||||
/* e.g.: nmcli -f profile con show my-eth0 */
|
||||
|
|
@ -755,12 +693,12 @@ update_secrets_in_connection (NMRemoteConnection *remote, NMConnection *local)
|
|||
int i;
|
||||
GError *error = NULL;
|
||||
|
||||
for (i = 0; nmc_fields_settings_names[i].name; i++) {
|
||||
secrets = nm_remote_connection_get_secrets (remote, nmc_fields_settings_names[i].name, NULL, NULL);
|
||||
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) {
|
||||
secrets = nm_remote_connection_get_secrets (remote, nm_meta_setting_infos[i].setting_name, NULL, NULL);
|
||||
if (secrets) {
|
||||
if (!nm_connection_update_secrets (local, NULL, secrets, &error) && error) {
|
||||
g_printerr (_("Error updating secrets for %s: %s\n"),
|
||||
nmc_fields_settings_names[i].name,
|
||||
nm_meta_setting_infos[i].setting_name,
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
|
@ -789,7 +727,8 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc, gboolean s
|
|||
else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
print_settings_array = parse_output_fields (fields_str, nmc_fields_settings_names, TRUE, &prop_array, &error);
|
||||
print_settings_array = parse_output_fields (fields_str, (const NMMetaAbstractInfo *const*) nm_meta_setting_infos_editor_p (),
|
||||
TRUE, &prop_array, &error);
|
||||
if (error) {
|
||||
g_string_printf (nmc->return_text, _("Error: 'connection show': %s"), error->message);
|
||||
g_error_free (error);
|
||||
|
|
@ -800,17 +739,22 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc, gboolean s
|
|||
|
||||
/* Main header */
|
||||
{
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
gs_free char *header_name = NULL;
|
||||
gs_free NmcOutputField *row = NULL;
|
||||
gs_unref_array GArray *out_indices = NULL;
|
||||
|
||||
header_name = construct_header_name (base_hdr, nm_connection_get_id (connection));
|
||||
out_indices = parse_output_fields (NMC_FIELDS_SETTINGS_NAMES_ALL,
|
||||
nmc_fields_settings_names, FALSE, NULL, NULL);
|
||||
(const NMMetaAbstractInfo *const*) nm_meta_setting_infos_editor_p (),
|
||||
FALSE, NULL, NULL);
|
||||
|
||||
row = g_new0 (NmcOutputField, _NM_META_SETTING_TYPE_NUM + 1);
|
||||
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++)
|
||||
row[i].info = (const NMMetaAbstractInfo *) &nm_meta_setting_infos_editor[i];
|
||||
|
||||
nmc_fields_settings_names[0].flags = NMC_OF_FLAG_MAIN_HEADER_ONLY;
|
||||
print_required_fields (&nmc->nmc_config, NMC_OF_FLAG_MAIN_HEADER_ONLY,
|
||||
out_indices, header_name,
|
||||
0, nmc_fields_settings_names);
|
||||
0, row);
|
||||
}
|
||||
|
||||
/* Loop through the required settings and print them. */
|
||||
|
|
@ -824,7 +768,7 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc, gboolean s
|
|||
|
||||
was_output = FALSE;
|
||||
|
||||
setting = nm_connection_get_setting_by_name (connection, nmc_fields_settings_names[section_idx].name);
|
||||
setting = nm_connection_get_setting_by_name (connection, nm_meta_setting_infos_editor[section_idx].general->setting_name);
|
||||
if (setting) {
|
||||
setting_details (setting, nmc, prop_name, secrets);
|
||||
was_output = TRUE;
|
||||
|
|
@ -969,9 +913,7 @@ fill_output_connection (NMConnection *connection, NMClient *client, GPtrArray *o
|
|||
}
|
||||
prio_str = g_strdup_printf ("%u", nm_setting_connection_get_autoconnect_priority (s_con));
|
||||
|
||||
arr = nmc_dup_fields_array (nmc_fields_con_show,
|
||||
sizeof (nmc_fields_con_show),
|
||||
0);
|
||||
arr = nmc_dup_fields_array ((const NMMetaAbstractInfo *const*) nmc_fields_con_show, 0);
|
||||
|
||||
/* Show active connections in color */
|
||||
nmc_active_connection_state_to_color (ac_state_int, &color);
|
||||
|
|
@ -1008,9 +950,7 @@ fill_output_connection_for_invisible (NMActiveConnection *ac, GPtrArray *output_
|
|||
ac_state = active_connection_state_to_string (nm_active_connection_get_state (ac));
|
||||
ac_dev = get_ac_device_string (ac);
|
||||
|
||||
arr = nmc_dup_fields_array (nmc_fields_con_show,
|
||||
sizeof (nmc_fields_con_show),
|
||||
0);
|
||||
arr = nmc_dup_fields_array ((const NMMetaAbstractInfo *const*) nmc_fields_con_show, 0);
|
||||
|
||||
set_val_str (arr, 0, name);
|
||||
set_val_strc (arr, 1, nm_active_connection_get_uuid (ac));
|
||||
|
|
@ -1046,8 +986,8 @@ fill_output_active_connection (NMActiveConnection *active,
|
|||
NMDevice *master;
|
||||
const char *con_path = NULL, *con_zone = NULL;
|
||||
int i;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
int idx_start = with_group ? 0 : 1;
|
||||
|
||||
con = nm_active_connection_get_connection (active);
|
||||
|
|
@ -1076,17 +1016,14 @@ fill_output_active_connection (NMActiveConnection *active,
|
|||
if (dev_str->len > 0)
|
||||
g_string_truncate (dev_str, dev_str->len - 1); /* Cut off last ',' */
|
||||
|
||||
tmpl = nmc_fields_con_active_details_general;
|
||||
tmpl_len = sizeof (nmc_fields_con_active_details_general);
|
||||
if (!with_group) {
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_general;
|
||||
if (!with_group)
|
||||
tmpl++;
|
||||
tmpl_len -= sizeof (NmcOutputField);
|
||||
}
|
||||
|
||||
/* Fill field values */
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, o_flags);
|
||||
arr = nmc_dup_fields_array (tmpl, o_flags);
|
||||
if (with_group)
|
||||
set_val_strc (arr, 0, nmc_fields_con_active_details_groups[0].name);
|
||||
set_val_strc (arr, 0, nmc_fields_con_active_details_groups[0]->name);
|
||||
set_val_strc (arr, 1-idx_start, nm_active_connection_get_id (active));
|
||||
set_val_strc (arr, 2-idx_start, nm_active_connection_get_uuid (active));
|
||||
set_val_str (arr, 3-idx_start, dev_str->str);
|
||||
|
|
@ -1204,22 +1141,19 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
GArray *print_groups;
|
||||
GPtrArray *group_fields = NULL;
|
||||
int i;
|
||||
char *fields_str;
|
||||
char *fields_all = NMC_FIELDS_CON_ACTIVE_DETAILS_ALL;
|
||||
char *fields_common = NMC_FIELDS_CON_ACTIVE_DETAILS_ALL;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
const char *fields_str = NULL;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
size_t tmpl_len;
|
||||
const char *base_hdr = _("Activate connection details");
|
||||
gboolean was_output = FALSE;
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
fields_str = fields_common;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
|
||||
fields_str = fields_all;
|
||||
else
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0) {
|
||||
} else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0) {
|
||||
} else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
print_groups = parse_output_fields (fields_str, nmc_fields_con_active_details_groups, TRUE, &group_fields, &error);
|
||||
print_groups = parse_output_fields (fields_str, (const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_groups, TRUE, &group_fields, &error);
|
||||
if (error) {
|
||||
g_string_printf (nmc->return_text, _("Error: 'connection show': %s"), error->message);
|
||||
g_error_free (error);
|
||||
|
|
@ -1230,17 +1164,22 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
|
||||
/* Main header */
|
||||
{
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
gs_free char *header_name = NULL;
|
||||
gs_free NmcOutputField *row = NULL;
|
||||
gs_unref_array GArray *out_indices = NULL;
|
||||
|
||||
header_name = construct_header_name (base_hdr, nm_active_connection_get_uuid (acon));
|
||||
out_indices = parse_output_fields (NMC_FIELDS_CON_ACTIVE_DETAILS_ALL,
|
||||
nmc_fields_con_active_details_groups, FALSE, NULL, NULL);
|
||||
out_indices = parse_output_fields (NULL,
|
||||
(const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_groups,
|
||||
FALSE, NULL, NULL);
|
||||
|
||||
row = g_new0 (NmcOutputField, G_N_ELEMENTS (nmc_fields_con_active_details_groups) + 1);
|
||||
for (i = 0; nmc_fields_con_active_details_groups[i]; i++)
|
||||
row[i].info = (const NMMetaAbstractInfo *) nmc_fields_con_active_details_groups[i];
|
||||
|
||||
nmc_fields_con_active_details_groups[0].flags = NMC_OF_FLAG_MAIN_HEADER_ONLY;
|
||||
print_required_fields (&nmc->nmc_config, NMC_OF_FLAG_MAIN_HEADER_ONLY,
|
||||
out_indices, header_name,
|
||||
0, nmc_fields_con_active_details_groups);
|
||||
0, row);
|
||||
}
|
||||
|
||||
/* Loop through the groups and print them. */
|
||||
|
|
@ -1254,15 +1193,15 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
was_output = FALSE;
|
||||
|
||||
/* GENERAL */
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[0].name) == 0) {
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx]->name, nmc_fields_con_active_details_groups[0]->name) == 0) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
/* Add field names */
|
||||
tmpl = nmc_fields_con_active_details_general;
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_general;
|
||||
tmpl_len = sizeof (nmc_fields_con_active_details_general);
|
||||
out_indices = parse_output_fields (group_fld ? group_fld : NMC_FIELDS_CON_ACTIVE_DETAILS_GENERAL_ALL,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
out_indices = parse_output_fields (group_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
/* Fill in values */
|
||||
|
|
@ -1275,7 +1214,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* IP4 */
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[1].name) == 0) {
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx]->name, nmc_fields_con_active_details_groups[1]->name) == 0) {
|
||||
gboolean b1 = FALSE;
|
||||
NMIPConfig *cfg4 = nm_active_connection_get_ip4_config (acon);
|
||||
|
||||
|
|
@ -1284,7 +1223,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* DHCP4 */
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[2].name) == 0) {
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx]->name, nmc_fields_con_active_details_groups[2]->name) == 0) {
|
||||
gboolean b1 = FALSE;
|
||||
NMDhcpConfig *dhcp4 = nm_active_connection_get_dhcp4_config (acon);
|
||||
|
||||
|
|
@ -1293,7 +1232,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* IP6 */
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[3].name) == 0) {
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx]->name, nmc_fields_con_active_details_groups[3]->name) == 0) {
|
||||
gboolean b1 = FALSE;
|
||||
NMIPConfig *cfg6 = nm_active_connection_get_ip6_config (acon);
|
||||
|
||||
|
|
@ -1302,7 +1241,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* DHCP6 */
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[4].name) == 0) {
|
||||
if (strcasecmp (nmc_fields_con_active_details_groups[group_idx]->name, nmc_fields_con_active_details_groups[4]->name) == 0) {
|
||||
gboolean b1 = FALSE;
|
||||
NMDhcpConfig *dhcp6 = nm_active_connection_get_dhcp6_config (acon);
|
||||
|
||||
|
|
@ -1312,7 +1251,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
|
||||
/* VPN */
|
||||
if (NM_IS_VPN_CONNECTION (acon) &&
|
||||
strcasecmp (nmc_fields_con_active_details_groups[group_idx].name, nmc_fields_con_active_details_groups[5].name) == 0) {
|
||||
strcasecmp (nmc_fields_con_active_details_groups[group_idx]->name, nmc_fields_con_active_details_groups[5]->name) == 0) {
|
||||
NMConnection *con;
|
||||
NMSettingConnection *s_con;
|
||||
NMSettingVpn *s_vpn;
|
||||
|
|
@ -1329,11 +1268,10 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
s_con = nm_connection_get_setting_connection (con);
|
||||
g_assert (s_con != NULL);
|
||||
|
||||
tmpl = nmc_fields_con_active_details_vpn;
|
||||
tmpl_len = sizeof (nmc_fields_con_active_details_vpn);
|
||||
out_indices = parse_output_fields (group_fld ? group_fld : NMC_FIELDS_CON_ACTIVE_DETAILS_VPN_ALL,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_vpn;
|
||||
out_indices = parse_output_fields (group_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
s_vpn = nm_connection_get_setting_vpn (con);
|
||||
|
|
@ -1359,8 +1297,8 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
|
|||
vpn_state_str = g_strdup_printf ("%d - %s", vpn_state, vpn_connection_state_to_string (vpn_state));
|
||||
|
||||
/* Add values */
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_con_active_details_groups[5].name);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_con_active_details_groups[5]->name);
|
||||
set_val_str (arr, 1, type_str);
|
||||
set_val_strc (arr, 2, username ? username : get_vpn_data_item (con, VPN_DATA_ITEM_USERNAME));
|
||||
set_val_strc (arr, 3, get_vpn_data_item (con, VPN_DATA_ITEM_GATEWAY));
|
||||
|
|
@ -1420,9 +1358,9 @@ split_required_fields_for_con_show (const char *input,
|
|||
|
||||
found = FALSE;
|
||||
|
||||
for (i = 0; nmc_fields_settings_names[i].name; i++) {
|
||||
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++) {
|
||||
if ( is_all || is_common
|
||||
|| !strcasecmp (*iter, nmc_fields_settings_names[i].name)) {
|
||||
|| !strcasecmp (*iter, nm_meta_setting_infos[i].setting_name)) {
|
||||
if (dot)
|
||||
*dot = '.';
|
||||
g_string_append (str1, *iter);
|
||||
|
|
@ -1433,9 +1371,9 @@ split_required_fields_for_con_show (const char *input,
|
|||
}
|
||||
if (found)
|
||||
continue;
|
||||
for (i = 0; nmc_fields_con_active_details_groups[i].name; i++) {
|
||||
for (i = 0; nmc_fields_con_active_details_groups[i]; i++) {
|
||||
if ( is_all || is_common
|
||||
|| !strcasecmp (*iter, nmc_fields_con_active_details_groups[i].name)) {
|
||||
|| !strcasecmp (*iter, nmc_fields_con_active_details_groups[i]->name)) {
|
||||
if (dot)
|
||||
*dot = '.';
|
||||
g_string_append (str2, *iter);
|
||||
|
|
@ -1452,8 +1390,8 @@ split_required_fields_for_con_show (const char *input,
|
|||
else if (!strcasecmp (*iter, CON_SHOW_DETAIL_GROUP_ACTIVE))
|
||||
group_active = TRUE;
|
||||
else {
|
||||
char *allowed1 = nmc_get_allowed_fields (nmc_fields_settings_names, -1);
|
||||
char *allowed2 = nmc_get_allowed_fields (nmc_fields_con_active_details_groups, -1);
|
||||
char *allowed1 = nmc_get_allowed_fields ((const NMMetaAbstractInfo *const*) nm_meta_setting_infos_editor_p (), -1);
|
||||
char *allowed2 = nmc_get_allowed_fields ((const NMMetaAbstractInfo *const*) nmc_fields_con_active_details_groups, -1);
|
||||
g_set_error (error, NMCLI_ERROR, 0, _("invalid field '%s'; allowed fields: %s and %s, or %s,%s"),
|
||||
*iter, allowed1, allowed2, CON_SHOW_DETAIL_GROUP_PROFILE, CON_SHOW_DETAIL_GROUP_ACTIVE);
|
||||
g_free (allowed1);
|
||||
|
|
@ -1806,11 +1744,10 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
|
|||
|
||||
if (argc == 0) {
|
||||
const GPtrArray *connections;
|
||||
char *fields_str;
|
||||
char *fields_all = NMC_FIELDS_CON_SHOW_ALL;
|
||||
const char *fields_str = NULL;
|
||||
char *fields_common = NMC_FIELDS_CON_SHOW_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (nmc->complete)
|
||||
|
|
@ -1818,19 +1755,17 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
|
|||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
fields_str = fields_common;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
|
||||
fields_str = fields_all;
|
||||
else
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0) {
|
||||
} else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
tmpl = nmc_fields_con_show;
|
||||
tmpl_len = sizeof (nmc_fields_con_show);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_con_show;
|
||||
out_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &err);
|
||||
if (err)
|
||||
goto finish;
|
||||
|
||||
/* Add headers */
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
/* There might be active connections not present in connection list
|
||||
|
|
@ -3079,7 +3014,6 @@ static const NameItem nmc_dummy_settings [] = {
|
|||
{ NULL, NULL, NULL, FALSE }
|
||||
};
|
||||
|
||||
/* Available connection types */
|
||||
static const NameItem nmc_valid_connection_types[] = {
|
||||
{ NM_SETTING_GENERIC_SETTING_NAME, NULL, nmc_generic_settings }, /* Needs to be first. */
|
||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", nmc_ethernet_settings },
|
||||
|
|
@ -3215,7 +3149,6 @@ get_valid_properties_string (const NameItem *array,
|
|||
const char *postfix)
|
||||
{
|
||||
const NameItem *iter = array;
|
||||
const NmcOutputField *field_iter;
|
||||
const NMMetaSettingInfoEditor *setting_info;
|
||||
const char *prop_name = NULL;
|
||||
GString *str;
|
||||
|
|
@ -3252,28 +3185,15 @@ get_valid_properties_string (const NameItem *array,
|
|||
}
|
||||
|
||||
/* Search the array with the arguments of the current property */
|
||||
j = 0;
|
||||
while (!nm_streq0 (iter->name, nmc_fields_settings_names[j].name)) {
|
||||
g_assert (nmc_fields_settings_names[j].name);
|
||||
j++;
|
||||
}
|
||||
field_iter = nmc_fields_settings_names[j].group_list;
|
||||
setting_info = nmc_fields_settings_names[j].setting_info;
|
||||
|
||||
setting_info = nm_meta_setting_info_editor_find_by_name (iter->name);
|
||||
j = 0;
|
||||
while (TRUE) {
|
||||
gchar *new;
|
||||
const char *arg_name;
|
||||
|
||||
if (field_iter) {
|
||||
arg_name = field_iter[j].name;
|
||||
if (!arg_name)
|
||||
break;
|
||||
} else {
|
||||
if (j + 1 >= setting_info->properties_num)
|
||||
break;
|
||||
arg_name = setting_info->properties[j + 1].property_name;
|
||||
}
|
||||
if (j + 1 >= setting_info->properties_num)
|
||||
break;
|
||||
arg_name = setting_info->properties[j + 1].property_name;
|
||||
|
||||
/* If required, expand the alias too */
|
||||
if (!postfix && iter->alias) {
|
||||
|
|
|
|||
|
|
@ -35,10 +35,9 @@ nmc_read_connection_properties (NmCli *nmc,
|
|||
|
||||
void nmc_active_connection_state_to_color (NMActiveConnectionState state, NmcTermColor *color);
|
||||
|
||||
extern NmcOutputField nmc_fields_con_show[];
|
||||
extern NmcOutputField nmc_fields_settings_names[];
|
||||
extern NmcOutputField nmc_fields_con_active_details_general[];
|
||||
extern NmcOutputField nmc_fields_con_active_details_vpn[];
|
||||
extern NmcOutputField nmc_fields_con_active_details_groups[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_con_show[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_con_active_details_general[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_con_active_details_vpn[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[];
|
||||
|
||||
#endif /* NMC_CONNECTIONS_H */
|
||||
|
|
|
|||
|
|
@ -38,253 +38,209 @@
|
|||
#define PROMPT_INTERFACE _("Interface: ")
|
||||
#define PROMPT_INTERFACES _("Interface(s): ")
|
||||
|
||||
#define OUTPUT_FIELD_WITH_NAME(n) { .name = N_ (n), }
|
||||
#define OUTPUT_FIELD_WITH_FIELDS(n, fields) { .name = N_ (n), .group_list = fields + 1, }
|
||||
|
||||
/* Available fields for 'device status' */
|
||||
NmcOutputField nmc_fields_dev_status[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICE"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TYPE"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("STATE"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DBUS-PATH"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CONNECTION"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CON-UUID"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CON-PATH"), /* 6 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_status[] = {
|
||||
NMC_META_GENERIC ("DEVICE"), /* 0 */
|
||||
NMC_META_GENERIC ("TYPE"), /* 1 */
|
||||
NMC_META_GENERIC ("STATE"), /* 2 */
|
||||
NMC_META_GENERIC ("DBUS-PATH"), /* 3 */
|
||||
NMC_META_GENERIC ("CONNECTION"), /* 4 */
|
||||
NMC_META_GENERIC ("CON-UUID"), /* 5 */
|
||||
NMC_META_GENERIC ("CON-PATH"), /* 6 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_STATUS_ALL "DEVICE,TYPE,STATE,DBUS-PATH,CONNECTION,CON-UUID,CON-PATH"
|
||||
#define NMC_FIELDS_DEV_STATUS_COMMON "DEVICE,TYPE,STATE,CONNECTION"
|
||||
|
||||
|
||||
/* Available fields for 'device show' - GENERAL part */
|
||||
NmcOutputField nmc_fields_dev_show_general[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICE"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TYPE"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("NM-TYPE"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("VENDOR"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("PRODUCT"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DRIVER"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DRIVER-VERSION"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("FIRMWARE-VERSION"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("HWADDR"), /* 9 */
|
||||
OUTPUT_FIELD_WITH_NAME ("MTU"), /* 10 */
|
||||
OUTPUT_FIELD_WITH_NAME ("STATE"), /* 11 */
|
||||
OUTPUT_FIELD_WITH_NAME ("REASON"), /* 12 */
|
||||
OUTPUT_FIELD_WITH_NAME ("UDI"), /* 13 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IP-IFACE"), /* 14 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IS-SOFTWARE"), /* 15 */
|
||||
OUTPUT_FIELD_WITH_NAME ("NM-MANAGED"), /* 16 */
|
||||
OUTPUT_FIELD_WITH_NAME ("AUTOCONNECT"), /* 17 */
|
||||
OUTPUT_FIELD_WITH_NAME ("FIRMWARE-MISSING"), /* 18 */
|
||||
OUTPUT_FIELD_WITH_NAME ("NM-PLUGIN-MISSING"), /* 19 */
|
||||
OUTPUT_FIELD_WITH_NAME ("PHYS-PORT-ID"), /* 20 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CONNECTION"), /* 21 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CON-UUID"), /* 22 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CON-PATH"), /* 23 */
|
||||
OUTPUT_FIELD_WITH_NAME ("METERED"), /* 24 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_general[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("DEVICE"), /* 1 */
|
||||
NMC_META_GENERIC ("TYPE"), /* 2 */
|
||||
NMC_META_GENERIC ("NM-TYPE"), /* 3 */
|
||||
NMC_META_GENERIC ("VENDOR"), /* 4 */
|
||||
NMC_META_GENERIC ("PRODUCT"), /* 5 */
|
||||
NMC_META_GENERIC ("DRIVER"), /* 6 */
|
||||
NMC_META_GENERIC ("DRIVER-VERSION"), /* 7 */
|
||||
NMC_META_GENERIC ("FIRMWARE-VERSION"), /* 8 */
|
||||
NMC_META_GENERIC ("HWADDR"), /* 9 */
|
||||
NMC_META_GENERIC ("MTU"), /* 10 */
|
||||
NMC_META_GENERIC ("STATE"), /* 11 */
|
||||
NMC_META_GENERIC ("REASON"), /* 12 */
|
||||
NMC_META_GENERIC ("UDI"), /* 13 */
|
||||
NMC_META_GENERIC ("IP-IFACE"), /* 14 */
|
||||
NMC_META_GENERIC ("IS-SOFTWARE"), /* 15 */
|
||||
NMC_META_GENERIC ("NM-MANAGED"), /* 16 */
|
||||
NMC_META_GENERIC ("AUTOCONNECT"), /* 17 */
|
||||
NMC_META_GENERIC ("FIRMWARE-MISSING"), /* 18 */
|
||||
NMC_META_GENERIC ("NM-PLUGIN-MISSING"), /* 19 */
|
||||
NMC_META_GENERIC ("PHYS-PORT-ID"), /* 20 */
|
||||
NMC_META_GENERIC ("CONNECTION"), /* 21 */
|
||||
NMC_META_GENERIC ("CON-UUID"), /* 22 */
|
||||
NMC_META_GENERIC ("CON-PATH"), /* 23 */
|
||||
NMC_META_GENERIC ("METERED"), /* 24 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_GENERAL_ALL "NAME,DEVICE,TYPE,NM-TYPE,VENDOR,PRODUCT,DRIVER,DRIVER-VERSION,FIRMWARE-VERSION,HWADDR,MTU,"\
|
||||
"STATE,REASON,UDI,IP-IFACE,IS-SOFTWARE,NM-MANAGED,AUTOCONNECT,FIRMWARE-MISSING,NM-PLUGIN-MISSING,"\
|
||||
"PHYS-PORT-ID,CONNECTION,CON-UUID,CON-PATH,METERED"
|
||||
#define NMC_FIELDS_DEV_SHOW_GENERAL_COMMON "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,HWADDR,STATE"
|
||||
|
||||
/* Available fields for 'device show' - CONNECTIONS part */
|
||||
NmcOutputField nmc_fields_dev_show_connections[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("AVAILABLE-CONNECTION-PATHS"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("AVAILABLE-CONNECTIONS"), /* 2 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_connections[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("AVAILABLE-CONNECTION-PATHS"), /* 1 */
|
||||
NMC_META_GENERIC ("AVAILABLE-CONNECTIONS"), /* 2 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_CONNECTIONS_ALL "NAME,AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
|
||||
#define NMC_FIELDS_DEV_SHOW_CONNECTIONS_COMMON "NAME,AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
|
||||
|
||||
/* Available fields for 'device show' - CAPABILITIES part */
|
||||
NmcOutputField nmc_fields_dev_show_cap[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CARRIER-DETECT"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SPEED"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IS-SOFTWARE"), /* 3 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_cap[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("CARRIER-DETECT"), /* 1 */
|
||||
NMC_META_GENERIC ("SPEED"), /* 2 */
|
||||
NMC_META_GENERIC ("IS-SOFTWARE"), /* 3 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_CAP_ALL "NAME,CARRIER-DETECT,SPEED,IS-SOFTWARE"
|
||||
#define NMC_FIELDS_DEV_SHOW_CAP_COMMON "NAME,CARRIER-DETECT,SPEED,IS-SOFTWARE"
|
||||
|
||||
/* Available fields for 'device show' - wired properties part */
|
||||
NmcOutputField nmc_fields_dev_show_wired_prop[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CARRIER"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("S390-SUBCHANNELS"), /* 2 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_wired_prop[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("CARRIER"), /* 1 */
|
||||
NMC_META_GENERIC ("S390-SUBCHANNELS"), /* 2 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_WIRED_PROP_ALL "NAME,CARRIER,S390-SUBCHANNELS"
|
||||
#define NMC_FIELDS_DEV_SHOW_WIRED_PROP_COMMON "NAME,CARRIER,S390-SUBCHANNELS"
|
||||
|
||||
/* Available fields for 'device show' - wireless properties part */
|
||||
NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WEP"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WPA"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WPA2"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TKIP"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CCMP"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("AP"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ADHOC"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("2GHZ"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("5GHZ"), /* 9 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_wifi_prop[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("WEP"), /* 1 */
|
||||
NMC_META_GENERIC ("WPA"), /* 2 */
|
||||
NMC_META_GENERIC ("WPA2"), /* 3 */
|
||||
NMC_META_GENERIC ("TKIP"), /* 4 */
|
||||
NMC_META_GENERIC ("CCMP"), /* 5 */
|
||||
NMC_META_GENERIC ("AP"), /* 6 */
|
||||
NMC_META_GENERIC ("ADHOC"), /* 7 */
|
||||
NMC_META_GENERIC ("2GHZ"), /* 8 */
|
||||
NMC_META_GENERIC ("5GHZ"), /* 9 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_WIFI_PROP_ALL "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC,2GHZ,5GHZ"
|
||||
#define NMC_FIELDS_DEV_SHOW_WIFI_PROP_COMMON "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
|
||||
|
||||
/* Available fields for 'device show' - wimax properties part */
|
||||
NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CTR-FREQ"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("RSSI"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CINR"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TX-POW"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("BSID"), /* 5 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_wimax_prop[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("CTR-FREQ"), /* 1 */
|
||||
NMC_META_GENERIC ("RSSI"), /* 2 */
|
||||
NMC_META_GENERIC ("CINR"), /* 3 */
|
||||
NMC_META_GENERIC ("TX-POW"), /* 4 */
|
||||
NMC_META_GENERIC ("BSID"), /* 5 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_WIMAX_PROP_ALL "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
|
||||
#define NMC_FIELDS_DEV_SHOW_WIMAX_PROP_COMMON "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
|
||||
|
||||
/* Available fields for 'device wifi list' */
|
||||
NmcOutputField nmc_fields_dev_wifi_list[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SSID"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SSID-HEX"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("BSSID"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("MODE"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CHAN"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("FREQ"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("RATE"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SIGNAL"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("BARS"), /* 9 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SECURITY"), /* 10 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WPA-FLAGS"), /* 11 */
|
||||
OUTPUT_FIELD_WITH_NAME ("RSN-FLAGS"), /* 12 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICE"), /* 13 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ACTIVE"), /* 14 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IN-USE"), /* 15 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DBUS-PATH"), /* 16 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_wifi_list[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("SSID"), /* 1 */
|
||||
NMC_META_GENERIC ("SSID-HEX"), /* 2 */
|
||||
NMC_META_GENERIC ("BSSID"), /* 3 */
|
||||
NMC_META_GENERIC ("MODE"), /* 4 */
|
||||
NMC_META_GENERIC ("CHAN"), /* 5 */
|
||||
NMC_META_GENERIC ("FREQ"), /* 6 */
|
||||
NMC_META_GENERIC ("RATE"), /* 7 */
|
||||
NMC_META_GENERIC ("SIGNAL"), /* 8 */
|
||||
NMC_META_GENERIC ("BARS"), /* 9 */
|
||||
NMC_META_GENERIC ("SECURITY"), /* 10 */
|
||||
NMC_META_GENERIC ("WPA-FLAGS"), /* 11 */
|
||||
NMC_META_GENERIC ("RSN-FLAGS"), /* 12 */
|
||||
NMC_META_GENERIC ("DEVICE"), /* 13 */
|
||||
NMC_META_GENERIC ("ACTIVE"), /* 14 */
|
||||
NMC_META_GENERIC ("IN-USE"), /* 15 */
|
||||
NMC_META_GENERIC ("DBUS-PATH"), /* 16 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_WIFI_LIST_ALL "SSID,SSID-HEX,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY,"\
|
||||
"WPA-FLAGS,RSN-FLAGS,DEVICE,ACTIVE,IN-USE,DBUS-PATH"
|
||||
#define NMC_FIELDS_DEV_WIFI_LIST_COMMON "IN-USE,SSID,MODE,CHAN,RATE,SIGNAL,BARS,SECURITY"
|
||||
#define NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIFI_LIST_COMMON
|
||||
|
||||
/* Available fields for 'device wimax list' */
|
||||
NmcOutputField nmc_fields_dev_wimax_list[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("NSP"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SIGNAL"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("TYPE"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICE"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ACTIVE"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DBUS-PATH"), /* 6 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_wimax_list[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("NSP"), /* 1 */
|
||||
NMC_META_GENERIC ("SIGNAL"), /* 2 */
|
||||
NMC_META_GENERIC ("TYPE"), /* 3 */
|
||||
NMC_META_GENERIC ("DEVICE"), /* 4 */
|
||||
NMC_META_GENERIC ("ACTIVE"), /* 5 */
|
||||
NMC_META_GENERIC ("DBUS-PATH"), /* 6 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_WIMAX_LIST_ALL "NSP,SIGNAL,TYPE,DEVICE,ACTIVE,DBUS-PATH"
|
||||
#define NMC_FIELDS_DEV_WIMAX_LIST_COMMON "NSP,SIGNAL,TYPE,DEVICE,ACTIVE"
|
||||
#define NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIMAX_LIST_COMMON
|
||||
|
||||
/* Available fields for 'device show' - BOND, BRIDGE part */
|
||||
NmcOutputField nmc_fields_dev_show_master_prop[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SLAVES"), /* 1 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_master_prop[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("SLAVES"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_MASTER_PROP_ALL "NAME,SLAVES"
|
||||
#define NMC_FIELDS_DEV_SHOW_MASTER_PROP_COMMON "NAME,SLAVES"
|
||||
|
||||
/* Available fields for 'device show' - TEAM part */
|
||||
NmcOutputField nmc_fields_dev_show_team_prop[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SLAVES"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CONFIG"), /* 2 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_team_prop[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("SLAVES"), /* 1 */
|
||||
NMC_META_GENERIC ("CONFIG"), /* 2 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_TEAM_PROP_ALL "NAME,SLAVES,CONFIG"
|
||||
#define NMC_FIELDS_DEV_SHOW_TEAM_PROP_COMMON "NAME,SLAVES,CONFIG"
|
||||
|
||||
/* Available fields for 'device show' - VLAN part */
|
||||
NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("PARENT"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("ID"), /* 2 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_vlan_prop[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("PARENT"), /* 1 */
|
||||
NMC_META_GENERIC ("ID"), /* 2 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL "NAME,PARENT,ID"
|
||||
#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,PARENT,ID"
|
||||
|
||||
/* Available fields for 'device show' - BLUETOOTH part */
|
||||
NmcOutputField nmc_fields_dev_show_bluetooth[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CAPABILITIES"), /* 1 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_bluetooth[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("CAPABILITIES"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_BLUETOOTH_ALL "NAME,CAPABILITIES"
|
||||
#define NMC_FIELDS_DEV_SHOW_BLUETOOTH_COMMON "NAME,CAPABILITIES"
|
||||
|
||||
/* defined in common.c */
|
||||
extern NmcOutputField nmc_fields_ip4_config[];
|
||||
extern NmcOutputField nmc_fields_ip6_config[];
|
||||
extern NmcOutputField nmc_fields_dhcp4_config[];
|
||||
extern NmcOutputField nmc_fields_dhcp6_config[];
|
||||
|
||||
/* Available sections for 'device show' */
|
||||
NmcOutputField nmc_fields_dev_show_sections[] = {
|
||||
OUTPUT_FIELD_WITH_FIELDS ("GENERAL", nmc_fields_dev_show_general), /* 0 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("CAPABILITIES", nmc_fields_dev_show_cap), /* 1 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("WIFI-PROPERTIES", nmc_fields_dev_show_wifi_prop), /* 2 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("AP", nmc_fields_dev_wifi_list), /* 3 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("WIRED-PROPERTIES", nmc_fields_dev_show_wired_prop), /* 4 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("WIMAX-PROPERTIES", nmc_fields_dev_show_wimax_prop), /* 5 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("NSP", nmc_fields_dev_wimax_list), /* 6 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("IP4", nmc_fields_ip4_config), /* 7 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("DHCP4", nmc_fields_dhcp4_config), /* 8 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("IP6", nmc_fields_ip6_config), /* 9 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("DHCP6", nmc_fields_dhcp6_config), /* 10 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("BOND", nmc_fields_dev_show_master_prop), /* 11 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("TEAM", nmc_fields_dev_show_team_prop), /* 12 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("BRIDGE", nmc_fields_dev_show_master_prop), /* 13 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("VLAN", nmc_fields_dev_show_vlan_prop), /* 14 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("BLUETOOTH", nmc_fields_dev_show_bluetooth), /* 15 */
|
||||
OUTPUT_FIELD_WITH_FIELDS ("CONNECTIONS", nmc_fields_dev_show_connections), /* 16 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_sections[] = {
|
||||
NMC_META_GENERIC_WITH_NESTED ("GENERAL", nmc_fields_dev_show_general + 1), /* 0 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("CAPABILITIES", nmc_fields_dev_show_cap + 1), /* 1 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("WIFI-PROPERTIES", nmc_fields_dev_show_wifi_prop + 1), /* 2 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("AP", nmc_fields_dev_wifi_list + 1), /* 3 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("WIRED-PROPERTIES", nmc_fields_dev_show_wired_prop + 1), /* 4 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("WIMAX-PROPERTIES", nmc_fields_dev_show_wimax_prop + 1), /* 5 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("NSP", nmc_fields_dev_wimax_list + 1), /* 6 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("IP4", nmc_fields_ip4_config + 1), /* 7 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("DHCP4", nmc_fields_dhcp4_config + 1), /* 8 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("IP6", nmc_fields_ip6_config + 1), /* 9 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("DHCP6", nmc_fields_dhcp6_config + 1), /* 10 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("BOND", nmc_fields_dev_show_master_prop + 1), /* 11 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("TEAM", nmc_fields_dev_show_team_prop + 1), /* 12 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("BRIDGE", nmc_fields_dev_show_master_prop + 1), /* 13 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("VLAN", nmc_fields_dev_show_vlan_prop + 1), /* 14 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("BLUETOOTH", nmc_fields_dev_show_bluetooth + 1), /* 15 */
|
||||
NMC_META_GENERIC_WITH_NESTED ("CONNECTIONS", nmc_fields_dev_show_connections + 1), /* 16 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_SECTIONS_ALL "GENERAL,CAPABILITIES,BOND,TEAM,BRIDGE,VLAN,WIFI-PROPERTIES,AP,WIRED-PROPERTIES,"\
|
||||
"BLUETOOTH,CONNECTIONS,IP4,DHCP4,IP6,DHCP6"
|
||||
#define NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON "GENERAL.DEVICE,GENERAL.TYPE,GENERAL.HWADDR,GENERAL.MTU,GENERAL.STATE,"\
|
||||
"GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
|
||||
|
||||
/* Available fields for 'device lldp' */
|
||||
NmcOutputField nmc_fields_dev_lldp_list[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("NAME"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DEVICE"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CHASSIS-ID"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("PORT-ID"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("PORT-DESCRIPTION"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SYSTEM-NAME"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SYSTEM-DESCRIPTION"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("SYSTEM-CAPABILITIES"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IEEE-802-1-PVID"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IEEE-802-1-PPVID"), /* 9 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IEEE-802-1-PPVID-FLAGS"), /* 10 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IEEE-802-1-VID"), /* 11 */
|
||||
OUTPUT_FIELD_WITH_NAME ("IEEE-802-1-VLAN-NAME"), /* 12 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DESTINATION"), /* 13 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CHASSIS-ID-TYPE"), /* 14 */
|
||||
OUTPUT_FIELD_WITH_NAME ("PORT-ID-TYPE"), /* 15 */
|
||||
{ 0 }
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_lldp_list[] = {
|
||||
NMC_META_GENERIC ("NAME"), /* 0 */
|
||||
NMC_META_GENERIC ("DEVICE"), /* 1 */
|
||||
NMC_META_GENERIC ("CHASSIS-ID"), /* 2 */
|
||||
NMC_META_GENERIC ("PORT-ID"), /* 3 */
|
||||
NMC_META_GENERIC ("PORT-DESCRIPTION"), /* 4 */
|
||||
NMC_META_GENERIC ("SYSTEM-NAME"), /* 5 */
|
||||
NMC_META_GENERIC ("SYSTEM-DESCRIPTION"), /* 6 */
|
||||
NMC_META_GENERIC ("SYSTEM-CAPABILITIES"), /* 7 */
|
||||
NMC_META_GENERIC ("IEEE-802-1-PVID"), /* 8 */
|
||||
NMC_META_GENERIC ("IEEE-802-1-PPVID"), /* 9 */
|
||||
NMC_META_GENERIC ("IEEE-802-1-PPVID-FLAGS"), /* 10 */
|
||||
NMC_META_GENERIC ("IEEE-802-1-VID"), /* 11 */
|
||||
NMC_META_GENERIC ("IEEE-802-1-VLAN-NAME"), /* 12 */
|
||||
NMC_META_GENERIC ("DESTINATION"), /* 13 */
|
||||
NMC_META_GENERIC ("CHASSIS-ID-TYPE"), /* 14 */
|
||||
NMC_META_GENERIC ("PORT-ID-TYPE"), /* 15 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_LLDP_LIST_ALL "DEVICE,CHASSIS-ID,PORT-ID,PORT-DESCRIPTION,SYSTEM-NAME,SYSTEM-DESCRIPTION," \
|
||||
"SYSTEM-CAPABILITIES,IEEE-802-1-PVID,IEEE-802-1-PPVID,IEEE-802-1-PPVID-FLAGS," \
|
||||
"IEEE-802-1-VID,IEEE-802-1-VLAN-NAME,DESTINATION,CHASSIS-ID-TYPE,PORT-ID-TYPE"
|
||||
#define NMC_FIELDS_DEV_LLDP_LIST_COMMON "DEVICE,CHASSIS-ID,PORT-ID,PORT-DESCRIPTION,SYSTEM-NAME,SYSTEM-DESCRIPTION," \
|
||||
"SYSTEM-CAPABILITIES"
|
||||
|
||||
|
|
@ -850,8 +806,7 @@ fill_output_access_point (gpointer data, gpointer user_data)
|
|||
if (security_str->len > 0)
|
||||
g_string_truncate (security_str, security_str->len-1); /* Chop off last space */
|
||||
|
||||
arr = nmc_dup_fields_array (nmc_fields_dev_wifi_list,
|
||||
sizeof (nmc_fields_dev_wifi_list),
|
||||
arr = nmc_dup_fields_array ((const NMMetaAbstractInfo *const*) nmc_fields_dev_wifi_list,
|
||||
info->output_flags);
|
||||
|
||||
ap_name = g_strdup_printf ("AP[%d]", info->index++); /* AP */
|
||||
|
|
@ -943,8 +898,8 @@ print_bond_bridge_info (NMDevice *device,
|
|||
const GPtrArray *slaves = NULL;
|
||||
GString *slaves_str;
|
||||
int idx;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (NM_IS_DEVICE_BOND (device))
|
||||
|
|
@ -967,14 +922,13 @@ print_bond_bridge_info (NMDevice *device,
|
|||
if (slaves_str->len > 0)
|
||||
g_string_truncate (slaves_str, slaves_str->len-1); /* Chop off last space */
|
||||
|
||||
tmpl = nmc_fields_dev_show_master_prop;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_master_prop);
|
||||
out_indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DEV_SHOW_MASTER_PROP_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_master_prop;
|
||||
out_indices = parse_output_fields (one_field,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, group_prefix); /* i.e. BOND, TEAM, BRIDGE */
|
||||
set_val_str (arr, 1, slaves_str->str);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
@ -1015,8 +969,8 @@ print_team_info (NMDevice *device,
|
|||
const GPtrArray *slaves = NULL;
|
||||
GString *slaves_str;
|
||||
int idx;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const* tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (NM_IS_DEVICE_TEAM (device))
|
||||
|
|
@ -1037,14 +991,13 @@ print_team_info (NMDevice *device,
|
|||
if (slaves_str->len > 0)
|
||||
g_string_truncate (slaves_str, slaves_str->len-1); /* Chop off last space */
|
||||
|
||||
tmpl = nmc_fields_dev_show_team_prop;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_team_prop);
|
||||
out_indices = parse_output_fields (one_field ? one_field : NMC_FIELDS_DEV_SHOW_TEAM_PROP_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_team_prop;
|
||||
out_indices = parse_output_fields (one_field,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, group_prefix); /* TEAM */
|
||||
set_val_str (arr, 1, slaves_str->str);
|
||||
set_val_str (arr, 2, sanitize_team_config (nm_device_team_get_config (NM_DEVICE_TEAM (device))));
|
||||
|
|
@ -1071,11 +1024,9 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
char *speed_str, *state_str, *reason_str, *mtu_str;
|
||||
GArray *sections_array;
|
||||
int k;
|
||||
char *fields_str;
|
||||
char *fields_all = NMC_FIELDS_DEV_SHOW_SECTIONS_ALL;
|
||||
char *fields_common = NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const char *fields_str = NULL;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
gboolean was_output = FALSE;
|
||||
NMIPConfig *cfg4, *cfg6;
|
||||
NMDhcpConfig *dhcp4, *dhcp6;
|
||||
|
|
@ -1083,13 +1034,12 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
GPtrArray *fields_in_section = NULL;
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
fields_str = fields_common;
|
||||
else if (strcasecmp (nmc->required_fields, "all") == 0)
|
||||
fields_str = fields_all;
|
||||
else
|
||||
fields_str = NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON;
|
||||
else if (strcasecmp (nmc->required_fields, "all") == 0) {
|
||||
} else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
sections_array = parse_output_fields (fields_str, nmc_fields_dev_show_sections, TRUE, &fields_in_section, &error);
|
||||
sections_array = parse_output_fields (fields_str, (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_sections, TRUE, &fields_in_section, &error);
|
||||
if (error) {
|
||||
g_string_printf (nmc->return_text, _("Error: 'device show': %s"), error->message);
|
||||
g_error_free (error);
|
||||
|
|
@ -1098,20 +1048,26 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
|
||||
{
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
gs_unref_array GArray *out_indices = NULL;
|
||||
gs_free char *header_name = NULL;
|
||||
gs_free NmcOutputField *row = NULL;
|
||||
int i;
|
||||
|
||||
/* Main header (pretty only) */
|
||||
header_name = construct_header_name (base_hdr, nm_device_get_iface (device));
|
||||
|
||||
/* Lazy way to retrieve sorted array from 0 to the number of dev fields */
|
||||
out_indices = parse_output_fields (NMC_FIELDS_DEV_SHOW_GENERAL_ALL,
|
||||
nmc_fields_dev_show_general, FALSE, NULL, NULL);
|
||||
out_indices = parse_output_fields (NULL,
|
||||
(const NMMetaAbstractInfo *const*) nmc_fields_dev_show_general,
|
||||
FALSE, NULL, NULL);
|
||||
|
||||
row = g_new0 (NmcOutputField, _NM_META_SETTING_TYPE_NUM + 1);
|
||||
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++)
|
||||
row[i].info = (const NMMetaAbstractInfo *) &nmc_fields_dev_show_general[i];
|
||||
|
||||
nmc_fields_dev_show_general[0].flags = NMC_OF_FLAG_MAIN_HEADER_ONLY;
|
||||
print_required_fields (&nmc->nmc_config, NMC_OF_FLAG_MAIN_HEADER_ONLY,
|
||||
out_indices, header_name,
|
||||
0, nmc_fields_dev_show_general);
|
||||
0, row);
|
||||
}
|
||||
|
||||
/* Loop through the required sections and print them. */
|
||||
|
|
@ -1128,14 +1084,13 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
reason = nm_device_get_state_reason (device);
|
||||
|
||||
/* section GENERAL */
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[0].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[0]->name)) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dev_show_general;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_general);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_GENERAL_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_general;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
state_str = g_strdup_printf ("%d (%s)", state, nmc_device_state_to_string (state));
|
||||
|
|
@ -1144,8 +1099,8 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
mtu_str = g_strdup_printf ("%u", nm_device_get_mtu (device));
|
||||
acon = nm_device_get_active_connection (device);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[0].name); /* "GENERAL"*/
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[0]->name); /* "GENERAL"*/
|
||||
set_val_strc (arr, 1, nm_device_get_iface (device));
|
||||
set_val_strc (arr, 2, nm_device_get_type_description (device));
|
||||
set_val_strc (arr, 3, G_OBJECT_TYPE_NAME (device));
|
||||
|
|
@ -1178,14 +1133,13 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* section CAPABILITIES */
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[1].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[1]->name)) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dev_show_cap;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_cap);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_CAP_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_cap;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
caps = nm_device_get_capabilities (device);
|
||||
|
|
@ -1200,8 +1154,8 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
speed_str = speed ? g_strdup_printf (_("%u Mb/s"), speed) : g_strdup (_("unknown"));
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[1].name); /* "CAPABILITIES" */
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[1]->name); /* "CAPABILITIES" */
|
||||
set_val_strc (arr, 1, (caps & NM_DEVICE_CAP_CARRIER_DETECT) ? _("yes") : _("no"));
|
||||
set_val_str (arr, 2, speed_str);
|
||||
set_val_strc (arr, 3, (caps & NM_DEVICE_CAP_IS_SOFTWARE) ? _("yes") : _("no"));
|
||||
|
|
@ -1220,20 +1174,19 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
GPtrArray *aps;
|
||||
|
||||
/* section WIFI-PROPERTIES */
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[2].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[2]->name)) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
wcaps = nm_device_wifi_get_capabilities (NM_DEVICE_WIFI (device));
|
||||
|
||||
tmpl = nmc_fields_dev_show_wifi_prop;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_wifi_prop);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_WIFI_PROP_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_wifi_prop;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[2].name); /* "WIFI-PROPERTIES" */
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[2]->name); /* "WIFI-PROPERTIES" */
|
||||
set_val_strc (arr, 1, (wcaps & (NM_WIFI_DEVICE_CAP_CIPHER_WEP40 | NM_WIFI_DEVICE_CAP_CIPHER_WEP104)) ?
|
||||
_("yes") : _("no"));
|
||||
set_val_strc (arr, 2, (wcaps & NM_WIFI_DEVICE_CAP_WPA) ? _("yes") : _("no"));
|
||||
|
|
@ -1254,7 +1207,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* section AP */
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[3].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[3]->name)) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (state == NM_DEVICE_STATE_ACTIVATED) {
|
||||
|
|
@ -1262,11 +1215,10 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL;
|
||||
}
|
||||
|
||||
tmpl = nmc_fields_dev_wifi_list;
|
||||
tmpl_len = sizeof (nmc_fields_dev_wifi_list);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_wifi_list;
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
{
|
||||
|
|
@ -1290,18 +1242,17 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
} else if (NM_IS_DEVICE_ETHERNET (device)) {
|
||||
/* WIRED-PROPERTIES */
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[4].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[4]->name)) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dev_show_wired_prop;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_wired_prop);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_WIRED_PROP_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_wired_prop;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[4].name); /* "WIRED-PROPERTIES" */
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[4]->name); /* "WIRED-PROPERTIES" */
|
||||
set_val_strc (arr, 1, (nm_device_ethernet_get_carrier (NM_DEVICE_ETHERNET (device))) ?
|
||||
_("on") : _("off"));
|
||||
set_val_arrc (arr, 2, ((const char **) nm_device_ethernet_get_s390_subchannels (NM_DEVICE_ETHERNET (device))));
|
||||
|
|
@ -1320,55 +1271,54 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
dhcp6 = nm_device_get_dhcp6_config (device);
|
||||
|
||||
/* IP4 */
|
||||
if (cfg4 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[7].name))
|
||||
was_output = print_ip4_config (cfg4, &nmc->nmc_config, nmc_fields_dev_show_sections[7].name, section_fld);
|
||||
if (cfg4 && !strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[7]->name))
|
||||
was_output = print_ip4_config (cfg4, &nmc->nmc_config, nmc_fields_dev_show_sections[7]->name, section_fld);
|
||||
|
||||
/* DHCP4 */
|
||||
if (dhcp4 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[8].name))
|
||||
was_output = print_dhcp4_config (dhcp4, &nmc->nmc_config, nmc_fields_dev_show_sections[8].name, section_fld);
|
||||
if (dhcp4 && !strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[8]->name))
|
||||
was_output = print_dhcp4_config (dhcp4, &nmc->nmc_config, nmc_fields_dev_show_sections[8]->name, section_fld);
|
||||
|
||||
/* IP6 */
|
||||
if (cfg6 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[9].name))
|
||||
was_output = print_ip6_config (cfg6, &nmc->nmc_config, nmc_fields_dev_show_sections[9].name, section_fld);
|
||||
if (cfg6 && !strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[9]->name))
|
||||
was_output = print_ip6_config (cfg6, &nmc->nmc_config, nmc_fields_dev_show_sections[9]->name, section_fld);
|
||||
|
||||
/* DHCP6 */
|
||||
if (dhcp6 && !strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[10].name))
|
||||
was_output = print_dhcp6_config (dhcp6, &nmc->nmc_config, nmc_fields_dev_show_sections[10].name, section_fld);
|
||||
if (dhcp6 && !strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[10]->name))
|
||||
was_output = print_dhcp6_config (dhcp6, &nmc->nmc_config, nmc_fields_dev_show_sections[10]->name, section_fld);
|
||||
|
||||
/* Bond specific information */
|
||||
if (NM_IS_DEVICE_BOND (device)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[11].name))
|
||||
was_output = print_bond_bridge_info (device, nmc, nmc_fields_dev_show_sections[11].name, section_fld);
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[11]->name))
|
||||
was_output = print_bond_bridge_info (device, nmc, nmc_fields_dev_show_sections[11]->name, section_fld);
|
||||
}
|
||||
|
||||
/* Team specific information */
|
||||
if (NM_IS_DEVICE_TEAM (device)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[12].name))
|
||||
was_output = print_team_info (device, nmc, nmc_fields_dev_show_sections[12].name, section_fld);
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[12]->name))
|
||||
was_output = print_team_info (device, nmc, nmc_fields_dev_show_sections[12]->name, section_fld);
|
||||
}
|
||||
|
||||
/* Bridge specific information */
|
||||
if (NM_IS_DEVICE_BRIDGE (device)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[13].name))
|
||||
was_output = print_bond_bridge_info (device, nmc, nmc_fields_dev_show_sections[13].name, section_fld);
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[13]->name))
|
||||
was_output = print_bond_bridge_info (device, nmc, nmc_fields_dev_show_sections[13]->name, section_fld);
|
||||
}
|
||||
|
||||
/* VLAN-specific information */
|
||||
if ((NM_IS_DEVICE_VLAN (device))) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[14].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[14]->name)) {
|
||||
char * vlan_id_str = g_strdup_printf ("%u", nm_device_vlan_get_vlan_id (NM_DEVICE_VLAN (device)));
|
||||
NMDevice *parent = nm_device_vlan_get_parent (NM_DEVICE_VLAN (device));
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dev_show_vlan_prop;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_vlan_prop);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_VLAN_PROP_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_vlan_prop;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[14].name); /* "VLAN" */
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[14]->name); /* "VLAN" */
|
||||
set_val_strc (arr, 1, parent ? nm_device_get_iface (parent) : NULL);
|
||||
set_val_str (arr, 2, vlan_id_str);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
@ -1381,18 +1331,17 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
|
||||
if (NM_IS_DEVICE_BT (device)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[15].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[15]->name)) {
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dev_show_bluetooth;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_bluetooth);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_BLUETOOTH_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_bluetooth;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[15].name); /* "BLUETOOTH" */
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[15]->name); /* "BLUETOOTH" */
|
||||
set_val_str (arr, 1, bluetooth_caps_to_string (nm_device_bt_get_capabilities (NM_DEVICE_BT (device))));
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
|
|
@ -1403,18 +1352,17 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
}
|
||||
|
||||
/* section CONNECTIONS */
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx].name, nmc_fields_dev_show_sections[16].name)) {
|
||||
if (!strcasecmp (nmc_fields_dev_show_sections[section_idx]->name, nmc_fields_dev_show_sections[16]->name)) {
|
||||
const GPtrArray *avail_cons;
|
||||
GString *ac_paths_str;
|
||||
char **ac_arr = NULL;
|
||||
int i;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
tmpl = nmc_fields_dev_show_connections;
|
||||
tmpl_len = sizeof (nmc_fields_dev_show_connections);
|
||||
out_indices = parse_output_fields (section_fld ? section_fld : NMC_FIELDS_DEV_SHOW_CONNECTIONS_ALL,
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_show_connections;
|
||||
out_indices = parse_output_fields (section_fld,
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
/* available-connections */
|
||||
|
|
@ -1441,8 +1389,8 @@ show_device_info (NMDevice *device, NmCli *nmc)
|
|||
if (ac_paths_str->len > 0)
|
||||
g_string_append_c (ac_paths_str, '}');
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[16].name); /* "CONNECTIONS" */
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_strc (arr, 0, nmc_fields_dev_show_sections[16]->name); /* "CONNECTIONS" */
|
||||
set_val_str (arr, 1, ac_paths_str->str);
|
||||
set_val_arr (arr, 2, (ac_arr));
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
@ -1486,8 +1434,7 @@ fill_output_device_status (NMDevice *device, GPtrArray *output_data)
|
|||
NMDeviceState state;
|
||||
NmcTermColor color;
|
||||
NmcTermFormat color_fmt;
|
||||
NmcOutputField *arr = nmc_dup_fields_array (nmc_fields_dev_status,
|
||||
sizeof (nmc_fields_dev_status),
|
||||
NmcOutputField *arr = nmc_dup_fields_array ((const NMMetaAbstractInfo *const*) nmc_fields_dev_status,
|
||||
0);
|
||||
|
||||
state = nm_device_get_state (device);
|
||||
|
|
@ -1515,11 +1462,9 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
|
|||
GError *error = NULL;
|
||||
NMDevice **devices;
|
||||
int i;
|
||||
char *fields_str;
|
||||
char *fields_all = NMC_FIELDS_DEV_STATUS_ALL;
|
||||
char *fields_common = NMC_FIELDS_DEV_STATUS_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const char *fields_str = NULL;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
next_arg (nmc, &argc, &argv, NULL);
|
||||
|
|
@ -1534,14 +1479,12 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
|
|||
}
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
fields_str = fields_common;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
|
||||
fields_str = fields_all;
|
||||
else
|
||||
fields_str = NMC_FIELDS_DEV_STATUS_COMMON;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0) {
|
||||
} else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
tmpl = nmc_fields_dev_status;
|
||||
tmpl_len = sizeof (nmc_fields_dev_status);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_status;
|
||||
out_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
|
||||
|
||||
if (error) {
|
||||
|
|
@ -1551,7 +1494,7 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
|
|||
}
|
||||
|
||||
/* Add headers */
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
devices = nmc_get_devices_sorted (nmc->client);
|
||||
|
|
@ -2515,7 +2458,7 @@ show_access_point_info (NMDevice *device, NmCli *nmc, NmcOutputData *out)
|
|||
active_bssid = active_ap ? nm_access_point_get_bssid (active_ap) : NULL;
|
||||
}
|
||||
|
||||
arr = nmc_dup_fields_array (nmc_fields_dev_wifi_list, sizeof (nmc_fields_dev_wifi_list),
|
||||
arr = nmc_dup_fields_array ((const NMMetaAbstractInfo *const*) nmc_fields_dev_wifi_list,
|
||||
NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out->output_data, arr);
|
||||
|
||||
|
|
@ -2661,11 +2604,9 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
|
|||
const GPtrArray *aps;
|
||||
APInfo *info;
|
||||
int i, j;
|
||||
char *fields_str;
|
||||
char *fields_all = NMC_FIELDS_DEV_WIFI_LIST_ALL;
|
||||
char *fields_common = NMC_FIELDS_DEV_WIFI_LIST_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const char *fields_str = NULL;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
const char *base_hdr = _("Wi-Fi scan list");
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
gs_free char *header_name = NULL;
|
||||
|
|
@ -2705,14 +2646,12 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
|
|||
}
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
fields_str = fields_common;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
|
||||
fields_str = fields_all;
|
||||
else
|
||||
fields_str = NMC_FIELDS_DEV_WIFI_LIST_COMMON;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0) {
|
||||
} else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
tmpl = nmc_fields_dev_wifi_list;
|
||||
tmpl_len = sizeof (nmc_fields_dev_wifi_list);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_wifi_list;
|
||||
out_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
|
||||
|
||||
if (error) {
|
||||
|
|
@ -2754,7 +2693,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
|
|||
return NMC_RESULT_ERROR_NOT_FOUND;
|
||||
}
|
||||
/* Add headers (field names) */
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
info = g_malloc0 (sizeof (APInfo));
|
||||
|
|
@ -2804,7 +2743,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
|
|||
header_name2 = construct_header_name (base_hdr, nm_device_get_iface (dev));
|
||||
out2_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, NULL);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out2.output_data, arr);
|
||||
|
||||
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (dev));
|
||||
|
|
@ -3708,11 +3647,11 @@ do_device_wifi (NmCli *nmc, int argc, char **argv)
|
|||
}
|
||||
|
||||
static int
|
||||
show_device_lldp_list (NMDevice *device, NmCli *nmc, char *fields_str, int *counter)
|
||||
show_device_lldp_list (NMDevice *device, NmCli *nmc, const char *fields_str, int *counter)
|
||||
{
|
||||
NmcOutputField *tmpl, *arr;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
GPtrArray *neighbors;
|
||||
size_t tmpl_len;
|
||||
const char *str;
|
||||
int i;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
|
@ -3723,21 +3662,20 @@ show_device_lldp_list (NMDevice *device, NmCli *nmc, char *fields_str, int *coun
|
|||
if (!neighbors || !neighbors->len)
|
||||
return 0;
|
||||
|
||||
tmpl = nmc_fields_dev_lldp_list;
|
||||
tmpl_len = sizeof (nmc_fields_dev_lldp_list);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_dev_lldp_list;
|
||||
|
||||
/* Main header name */
|
||||
header_name = construct_header_name (_("Device LLDP neighbors"),
|
||||
nm_device_get_iface (device));
|
||||
out_indices = parse_output_fields (fields_str, nmc_fields_dev_lldp_list, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
out_indices = parse_output_fields (fields_str, (const NMMetaAbstractInfo *const*) nmc_fields_dev_lldp_list, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
for (i = 0; i < neighbors->len; i++) {
|
||||
NMLldpNeighbor *neighbor = neighbors->pdata[i];
|
||||
guint value;
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
set_val_str (arr, 0, g_strdup_printf ("NEIGHBOR[%d]", (*counter)++));
|
||||
|
||||
set_val_strc (arr, 1, nm_device_get_iface (device));
|
||||
|
|
@ -3798,9 +3736,9 @@ do_device_lldp_list (NmCli *nmc, int argc, char **argv)
|
|||
{
|
||||
NMDevice *device = NULL;
|
||||
gs_free_error GError *error = NULL;
|
||||
char *fields_str;
|
||||
const char *fields_str = NULL;
|
||||
int counter = 0;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
gs_unref_array GArray *out_indices = NULL;
|
||||
|
||||
next_arg (nmc, &argc, &argv, NULL);
|
||||
while (argc > 0) {
|
||||
|
|
@ -3830,12 +3768,11 @@ do_device_lldp_list (NmCli *nmc, int argc, char **argv)
|
|||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
fields_str = NMC_FIELDS_DEV_LLDP_LIST_COMMON;
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0)
|
||||
fields_str = NMC_FIELDS_DEV_LLDP_LIST_ALL;
|
||||
else
|
||||
else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0) {
|
||||
} else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
out_indices = parse_output_fields (fields_str, nmc_fields_dev_lldp_list, FALSE, NULL, &error);
|
||||
out_indices = parse_output_fields (fields_str, (const NMMetaAbstractInfo *const*) nmc_fields_dev_lldp_list, FALSE, NULL, &error);
|
||||
|
||||
if (error) {
|
||||
g_string_printf (nmc->return_text, _("Error: 'device lldp list': %s"), error->message);
|
||||
|
|
|
|||
|
|
@ -34,20 +34,20 @@ NMDevice ** nmc_get_devices_sorted (NMClient *client);
|
|||
|
||||
void nmc_device_state_to_color (NMDeviceState state, NmcTermColor *color, NmcTermFormat *color_fmt);
|
||||
|
||||
extern NmcOutputField nmc_fields_dev_status[];
|
||||
extern NmcOutputField nmc_fields_dev_show_general[];
|
||||
extern NmcOutputField nmc_fields_dev_show_connections[];
|
||||
extern NmcOutputField nmc_fields_dev_show_cap[];
|
||||
extern NmcOutputField nmc_fields_dev_show_wired_prop[];
|
||||
extern NmcOutputField nmc_fields_dev_show_wifi_prop[];
|
||||
extern NmcOutputField nmc_fields_dev_show_wimax_prop[];
|
||||
extern NmcOutputField nmc_fields_dev_wifi_list[];
|
||||
extern NmcOutputField nmc_fields_dev_wimax_list[];
|
||||
extern NmcOutputField nmc_fields_dev_show_master_prop[];
|
||||
extern NmcOutputField nmc_fields_dev_show_team_prop[];
|
||||
extern NmcOutputField nmc_fields_dev_show_vlan_prop[];
|
||||
extern NmcOutputField nmc_fields_dev_show_bluetooth[];
|
||||
extern NmcOutputField nmc_fields_dev_show_sections[];
|
||||
extern NmcOutputField nmc_fields_dev_lldp_list[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_status[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_general[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_connections[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_cap[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_wired_prop[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_wifi_prop[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_wimax_prop[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_wifi_list[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_wimax_list[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_master_prop[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_team_prop[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_vlan_prop[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_bluetooth[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_show_sections[];
|
||||
extern const NmcMetaGenericInfo *const nmc_fields_dev_lldp_list[];
|
||||
|
||||
#endif /* NMC_DEVICES_H */
|
||||
|
|
|
|||
|
|
@ -34,23 +34,20 @@
|
|||
#include "devices.h"
|
||||
#include "connections.h"
|
||||
|
||||
#define OUTPUT_FIELD_WITH_NAME(n) { .name = N_ (n), }
|
||||
|
||||
/* Available fields for 'general status' */
|
||||
static NmcOutputField nmc_fields_nm_status[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("RUNNING"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("VERSION"), /* 1 */
|
||||
OUTPUT_FIELD_WITH_NAME ("STATE"), /* 2 */
|
||||
OUTPUT_FIELD_WITH_NAME ("STARTUP"), /* 3 */
|
||||
OUTPUT_FIELD_WITH_NAME ("CONNECTIVITY"), /* 4 */
|
||||
OUTPUT_FIELD_WITH_NAME ("NETWORKING"), /* 5 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WIFI-HW"), /* 6 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WIFI"), /* 7 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WWAN-HW"), /* 8 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WWAN"), /* 9 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WIMAX-HW"), /* 10 */
|
||||
OUTPUT_FIELD_WITH_NAME ("WIMAX"), /* 11 */
|
||||
{ 0 }
|
||||
static const NmcMetaGenericInfo *const nmc_fields_nm_status[] = {
|
||||
NMC_META_GENERIC ("RUNNING"), /* 0 */
|
||||
NMC_META_GENERIC ("VERSION"), /* 1 */
|
||||
NMC_META_GENERIC ("STATE"), /* 2 */
|
||||
NMC_META_GENERIC ("STARTUP"), /* 3 */
|
||||
NMC_META_GENERIC ("CONNECTIVITY"), /* 4 */
|
||||
NMC_META_GENERIC ("NETWORKING"), /* 5 */
|
||||
NMC_META_GENERIC ("WIFI-HW"), /* 6 */
|
||||
NMC_META_GENERIC ("WIFI"), /* 7 */
|
||||
NMC_META_GENERIC ("WWAN-HW"), /* 8 */
|
||||
NMC_META_GENERIC ("WWAN"), /* 9 */
|
||||
NMC_META_GENERIC ("WIMAX-HW"), /* 10 */
|
||||
NMC_META_GENERIC ("WIMAX"), /* 11 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_NM_STATUS_ALL "RUNNING,VERSION,STATE,STARTUP,CONNECTIVITY,NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
|
||||
#define NMC_FIELDS_NM_STATUS_SWITCH "NETWORKING,WIFI-HW,WIFI,WWAN-HW,WWAN"
|
||||
|
|
@ -64,19 +61,19 @@ static NmcOutputField nmc_fields_nm_status[] = {
|
|||
|
||||
|
||||
/* Available fields for 'general permissions' */
|
||||
static NmcOutputField nmc_fields_nm_permissions[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("PERMISSION"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("VALUE"), /* 1 */
|
||||
{ 0 }
|
||||
static const NmcMetaGenericInfo *const nmc_fields_nm_permissions[] = {
|
||||
NMC_META_GENERIC ("PERMISSION"), /* 0 */
|
||||
NMC_META_GENERIC ("VALUE"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_NM_PERMISSIONS_ALL "PERMISSION,VALUE"
|
||||
#define NMC_FIELDS_NM_PERMISSIONS_COMMON "PERMISSION,VALUE"
|
||||
|
||||
/* Available fields for 'general logging' */
|
||||
static NmcOutputField nmc_fields_nm_logging[] = {
|
||||
OUTPUT_FIELD_WITH_NAME ("LEVEL"), /* 0 */
|
||||
OUTPUT_FIELD_WITH_NAME ("DOMAINS"), /* 1 */
|
||||
{ 0 }
|
||||
static const NmcMetaGenericInfo *const nmc_fields_nm_logging[] = {
|
||||
NMC_META_GENERIC ("LEVEL"), /* 0 */
|
||||
NMC_META_GENERIC ("DOMAINS"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_NM_LOGGING_ALL "LEVEL,DOMAINS"
|
||||
#define NMC_FIELDS_NM_LOGGING_COMMON "LEVEL,DOMAINS"
|
||||
|
|
@ -323,8 +320,8 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl
|
|||
const char *fields_str;
|
||||
const char *fields_all = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_ALL;
|
||||
const char *fields_common = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
|
|
@ -334,8 +331,7 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl
|
|||
else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
tmpl = nmc_fields_nm_status;
|
||||
tmpl_len = sizeof (nmc_fields_nm_status);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_nm_status;
|
||||
out_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
|
||||
|
||||
if (error) {
|
||||
|
|
@ -354,10 +350,10 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl
|
|||
wwan_hw_enabled = nm_client_wwan_hardware_get_enabled (nmc->client);
|
||||
wwan_enabled = nm_client_wwan_get_enabled (nmc->client);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
|
||||
arr = nmc_dup_fields_array (tmpl, 0);
|
||||
set_val_strc (arr, 0, _("running"));
|
||||
set_val_strc (arr, 1, nm_client_get_version (nmc->client));
|
||||
set_val_strc (arr, 2, nm_state_to_string (state));
|
||||
|
|
@ -474,8 +470,8 @@ print_permissions (void *user_data)
|
|||
const char *fields_str;
|
||||
const char *fields_all = NMC_FIELDS_NM_PERMISSIONS_ALL;
|
||||
const char *fields_common = NMC_FIELDS_NM_PERMISSIONS_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
|
|
@ -485,8 +481,7 @@ print_permissions (void *user_data)
|
|||
else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
tmpl = nmc_fields_nm_permissions;
|
||||
tmpl_len = sizeof (nmc_fields_nm_permissions);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_nm_permissions;
|
||||
out_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
|
||||
|
||||
if (error) {
|
||||
|
|
@ -496,14 +491,14 @@ print_permissions (void *user_data)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
|
||||
for (perm = NM_CLIENT_PERMISSION_NONE + 1; perm <= NM_CLIENT_PERMISSION_LAST; perm++) {
|
||||
NMClientPermissionResult perm_result = nm_client_get_permission_result (nmc->client, perm);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
|
||||
arr = nmc_dup_fields_array (tmpl, 0);
|
||||
set_val_strc (arr, 0, permission_to_string (perm));
|
||||
set_val_strc (arr, 1, permission_result_to_string (perm_result));
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
@ -588,8 +583,8 @@ show_general_logging (NmCli *nmc)
|
|||
const char *fields_str;
|
||||
const char *fields_all = NMC_FIELDS_NM_LOGGING_ALL;
|
||||
const char *fields_common = NMC_FIELDS_NM_LOGGING_COMMON;
|
||||
NmcOutputField *tmpl, *arr;
|
||||
size_t tmpl_len;
|
||||
const NMMetaAbstractInfo *const*tmpl;
|
||||
NmcOutputField *arr;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0)
|
||||
|
|
@ -599,8 +594,7 @@ show_general_logging (NmCli *nmc)
|
|||
else
|
||||
fields_str = nmc->required_fields;
|
||||
|
||||
tmpl = nmc_fields_nm_logging;
|
||||
tmpl_len = sizeof (nmc_fields_nm_logging);
|
||||
tmpl = (const NMMetaAbstractInfo *const*) nmc_fields_nm_logging;
|
||||
out_indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error);
|
||||
|
||||
if (error) {
|
||||
|
|
@ -618,10 +612,10 @@ show_general_logging (NmCli *nmc)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
arr = nmc_dup_fields_array (tmpl, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, 0);
|
||||
arr = nmc_dup_fields_array (tmpl, 0);
|
||||
set_val_str (arr, 0, level);
|
||||
set_val_str (arr, 1, domains);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
|
|
|||
|
|
@ -51,10 +51,23 @@
|
|||
#endif
|
||||
|
||||
/* Global NmCli object */
|
||||
// FIXME: Currently, we pass NmCli over in most APIs, but we might refactor
|
||||
// that and use the global variable directly instead.
|
||||
NmCli nm_cli;
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const char *
|
||||
_meta_type_nmc_generic_info_get_name (const NMMetaAbstractInfo *abstract_info)
|
||||
{
|
||||
return ((const NmcMetaGenericInfo *) abstract_info)->name;
|
||||
}
|
||||
|
||||
const NMMetaType nmc_meta_type_generic_info = {
|
||||
.type_name = "nmc-generic-info",
|
||||
.get_name = _meta_type_nmc_generic_info_get_name,
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef struct {
|
||||
NmCli *nmc;
|
||||
int argc;
|
||||
|
|
@ -83,16 +96,12 @@ complete_field_setting (GHashTable *h, NMMetaSettingType setting_type)
|
|||
}
|
||||
|
||||
static void
|
||||
complete_field (GHashTable *h, const char *setting, const NmcOutputField *field)
|
||||
complete_field (GHashTable *h, const NmcMetaGenericInfo *const*field)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; field[i].name; i++) {
|
||||
if (setting)
|
||||
g_hash_table_add (h, g_strdup_printf ("%s.%s", setting, field[i].name));
|
||||
else
|
||||
g_hash_table_add (h, g_strdup (field[i].name));
|
||||
}
|
||||
for (i = 0; field[i]; i++)
|
||||
g_hash_table_add (h, g_strdup (field[i]->name));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -122,30 +131,29 @@ complete_fields (const char *prefix)
|
|||
|
||||
h = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
|
||||
|
||||
complete_field (h, NULL, nmc_fields_ip4_config);
|
||||
complete_field (h, NULL, nmc_fields_dhcp4_config);
|
||||
complete_field (h, NULL, nmc_fields_ip6_config);
|
||||
complete_field (h, NULL, nmc_fields_dhcp6_config);
|
||||
complete_field (h, NULL, nmc_fields_con_show);
|
||||
complete_field (h, NULL, nmc_fields_settings_names);
|
||||
complete_field (h, NULL, nmc_fields_con_active_details_general);
|
||||
complete_field (h, NULL, nmc_fields_con_active_details_vpn);
|
||||
complete_field (h, NULL, nmc_fields_con_active_details_groups);
|
||||
complete_field (h, NULL, nmc_fields_dev_status);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_general);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_connections);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_cap);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_wired_prop);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_wifi_prop);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_wimax_prop);
|
||||
complete_field (h, NULL, nmc_fields_dev_wifi_list);
|
||||
complete_field (h, NULL, nmc_fields_dev_wimax_list);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_master_prop);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_team_prop);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_vlan_prop);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_bluetooth);
|
||||
complete_field (h, NULL, nmc_fields_dev_show_sections);
|
||||
complete_field (h, NULL, nmc_fields_dev_lldp_list);
|
||||
complete_field (h, nmc_fields_ip4_config);
|
||||
complete_field (h, nmc_fields_dhcp4_config);
|
||||
complete_field (h, nmc_fields_ip6_config);
|
||||
complete_field (h, nmc_fields_dhcp6_config);
|
||||
complete_field (h, nmc_fields_con_show);
|
||||
complete_field (h, nmc_fields_con_active_details_general);
|
||||
complete_field (h, nmc_fields_con_active_details_vpn);
|
||||
complete_field (h, nmc_fields_con_active_details_groups);
|
||||
complete_field (h, nmc_fields_dev_status);
|
||||
complete_field (h, nmc_fields_dev_show_general);
|
||||
complete_field (h, nmc_fields_dev_show_connections);
|
||||
complete_field (h, nmc_fields_dev_show_cap);
|
||||
complete_field (h, nmc_fields_dev_show_wired_prop);
|
||||
complete_field (h, nmc_fields_dev_show_wifi_prop);
|
||||
complete_field (h, nmc_fields_dev_show_wimax_prop);
|
||||
complete_field (h, nmc_fields_dev_wifi_list);
|
||||
complete_field (h, nmc_fields_dev_wimax_list);
|
||||
complete_field (h, nmc_fields_dev_show_master_prop);
|
||||
complete_field (h, nmc_fields_dev_show_team_prop);
|
||||
complete_field (h, nmc_fields_dev_show_vlan_prop);
|
||||
complete_field (h, nmc_fields_dev_show_bluetooth);
|
||||
complete_field (h, nmc_fields_dev_show_sections);
|
||||
complete_field (h, nmc_fields_dev_lldp_list);
|
||||
|
||||
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++)
|
||||
complete_field_setting (h, i);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
#include "NetworkManager.h"
|
||||
#include "nm-secret-agent-old.h"
|
||||
|
||||
#include "nm-meta-setting-desc.h"
|
||||
|
||||
#if WITH_POLKIT_AGENT
|
||||
#include "nm-polkit-listener.h"
|
||||
#else
|
||||
|
|
@ -106,27 +108,37 @@ typedef enum {
|
|||
NMC_OF_FLAG_MAIN_HEADER_ONLY = 0x00000008, /* Print main header only */
|
||||
} NmcOfFlags;
|
||||
|
||||
struct _NMMetaSettingInfoEditor;
|
||||
extern const const NMMetaType nmc_meta_type_generic_info;
|
||||
|
||||
typedef struct _NmcOutputField {
|
||||
const char *name; /* Field's name */
|
||||
typedef struct _NmcOutputField NmcOutputField;
|
||||
typedef struct _NmcMetaGenericInfo NmcMetaGenericInfo;
|
||||
|
||||
struct _NmcMetaGenericInfo {
|
||||
const NMMetaType *meta_type;
|
||||
const char *name;
|
||||
const NmcMetaGenericInfo *const*nested;
|
||||
};
|
||||
|
||||
#define NMC_META_GENERIC(n, ...) \
|
||||
(&((NmcMetaGenericInfo) { \
|
||||
.meta_type = &nmc_meta_type_generic_info, \
|
||||
.name = N_ (n), \
|
||||
__VA_ARGS__ \
|
||||
}))
|
||||
|
||||
#define NMC_META_GENERIC_WITH_NESTED(n, nest) \
|
||||
NMC_META_GENERIC (n, .nested = (nest))
|
||||
|
||||
struct _NmcOutputField {
|
||||
const NMMetaAbstractInfo *info;
|
||||
int width; /* Width in screen columns */
|
||||
const struct _NmcOutputField *group_list; /* Points to an array with available section field names if this is a section (group) field */
|
||||
void *value; /* Value of current field - char* or char** (NULL-terminated array) */
|
||||
gboolean value_is_array; /* Whether value is char** instead of char* */
|
||||
gboolean free_value; /* Whether to free the value */
|
||||
NmcOfFlags flags; /* Flags - whether and how to print values/field names/headers */
|
||||
NmcTermColor color; /* Use this color to print value */
|
||||
NmcTermFormat color_fmt; /* Use this terminal format to print value */
|
||||
|
||||
/* in a very particular case NmcOutputField is used in combination with
|
||||
* the @group_list above. That list will go away (and the entire NmcOutputField
|
||||
* should separate formatting-options, setting-metadata and output.
|
||||
*
|
||||
* For now, hack around that by alternatively providing a @setting_info instead
|
||||
* of @group_list. */
|
||||
const struct _NMMetaSettingInfoEditor *setting_info;
|
||||
} NmcOutputField;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
NMC_USE_COLOR_AUTO,
|
||||
|
|
|
|||
|
|
@ -35,32 +35,6 @@
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const NmcOutputField *
|
||||
_get_nmc_output_fields (const NMMetaSettingInfoEditor *setting_info)
|
||||
{
|
||||
static NmcOutputField *fields[_NM_META_SETTING_TYPE_NUM + 1] = { };
|
||||
NmcOutputField **field;
|
||||
guint i;
|
||||
|
||||
g_return_val_if_fail (setting_info, NULL);
|
||||
g_return_val_if_fail (setting_info->general->meta_type < _NM_META_SETTING_TYPE_NUM, NULL);
|
||||
|
||||
field = &fields[setting_info->general->meta_type];
|
||||
|
||||
if (G_UNLIKELY (!*field)) {
|
||||
*field = g_new0 (NmcOutputField, setting_info->properties_num + 1);
|
||||
for (i = 0; i < setting_info->properties_num; i++) {
|
||||
NmcOutputField *f = &(*field)[i];
|
||||
|
||||
f->name = setting_info->properties[i].property_name;
|
||||
}
|
||||
}
|
||||
|
||||
return *field;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static gboolean
|
||||
get_answer (const char *prop, const char *value)
|
||||
{
|
||||
|
|
@ -833,40 +807,33 @@ nmc_property_set_gvalue (NMSetting *setting, const char *prop, GValue *value)
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static char *
|
||||
_all_properties (const NMMetaSettingInfoEditor *setting_info)
|
||||
static NmcOutputField *
|
||||
_dup_fields_array (const NMMetaSettingInfoEditor *setting_info, NmcOfFlags flags)
|
||||
{
|
||||
GString *str;
|
||||
guint i;
|
||||
NmcOutputField *row;
|
||||
gsize l;
|
||||
|
||||
str = g_string_sized_new (250);
|
||||
for (i = 0; i < setting_info->properties_num; i++) {
|
||||
if (str->len)
|
||||
g_string_append_c (str, ',');
|
||||
g_string_append (str, setting_info->properties[i].property_name);
|
||||
}
|
||||
return g_string_free (str, FALSE);
|
||||
l = setting_info->properties_num;
|
||||
|
||||
row = g_malloc0 ((l + 1) * sizeof (NmcOutputField));
|
||||
for (l = 0; l < setting_info->properties_num; l++)
|
||||
row[l].info = (const NMMetaAbstractInfo *) &setting_info->properties[l];
|
||||
row[0].flags = flags;
|
||||
return row;
|
||||
}
|
||||
|
||||
gboolean
|
||||
setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean show_secrets)
|
||||
{
|
||||
const NMMetaSettingInfo *meta_setting_info;
|
||||
const NMMetaSettingInfoEditor *setting_info;
|
||||
gs_free NmcOutputField *tmpl = NULL;
|
||||
NmcOutputField *arr;
|
||||
guint i;
|
||||
size_t tmpl_len;
|
||||
gs_free char *s_all = NULL;
|
||||
NMMetaAccessorGetType type = NM_META_ACCESSOR_GET_TYPE_PRETTY;
|
||||
NMC_OUTPUT_DATA_DEFINE_SCOPED (out);
|
||||
|
||||
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
|
||||
|
||||
meta_setting_info = nm_meta_setting_infos_by_gtype (G_OBJECT_TYPE (setting));
|
||||
g_return_val_if_fail (meta_setting_info, FALSE);
|
||||
|
||||
setting_info = &nm_meta_setting_infos_editor[meta_setting_info->meta_type];
|
||||
setting_info = nm_meta_setting_info_editor_find_by_setting (setting);
|
||||
g_return_val_if_fail (setting_info, FALSE);
|
||||
|
||||
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (setting, setting_info->general->get_setting_gtype ()), FALSE);
|
||||
|
|
@ -874,15 +841,13 @@ setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean
|
|||
if (nmc->nmc_config.print_output == NMC_PRINT_TERSE)
|
||||
type = NM_META_ACCESSOR_GET_TYPE_PARSABLE;
|
||||
|
||||
tmpl_len = sizeof (NmcOutputField) * (setting_info->properties_num + 1);
|
||||
tmpl = g_memdup (_get_nmc_output_fields (setting_info), tmpl_len);
|
||||
|
||||
out_indices = parse_output_fields (one_prop ?: (s_all = _all_properties (setting_info)),
|
||||
tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_FIELD_NAMES);
|
||||
out_indices = parse_output_fields (one_prop,
|
||||
(const NMMetaAbstractInfo *const*) nm_property_infos_for_setting_type (setting_info->general->meta_type),
|
||||
FALSE, NULL, NULL);
|
||||
arr = _dup_fields_array (setting_info, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add (out.output_data, arr);
|
||||
|
||||
arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
arr = _dup_fields_array (setting_info, NMC_OF_FLAG_SECTION_PREFIX);
|
||||
for (i = 0; i < setting_info->properties_num; i++) {
|
||||
const NMMetaPropertyInfo *property_info = &setting_info->properties[i];
|
||||
|
||||
|
|
|
|||
|
|
@ -613,7 +613,7 @@ set_val_color_all (NmcOutputField fields_array[], NmcTermColor color)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; fields_array[i].name; i++) {
|
||||
for (i = 0; fields_array[i].info; i++) {
|
||||
fields_array[i].color = color;
|
||||
}
|
||||
}
|
||||
|
|
@ -623,7 +623,7 @@ set_val_color_fmt_all (NmcOutputField fields_array[], NmcTermFormat format)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; fields_array[i].name; i++) {
|
||||
for (i = 0; fields_array[i].info; i++) {
|
||||
fields_array[i].color_fmt = format;
|
||||
}
|
||||
}
|
||||
|
|
@ -636,7 +636,7 @@ nmc_free_output_field_values (NmcOutputField fields_array[])
|
|||
{
|
||||
NmcOutputField *iter = fields_array;
|
||||
|
||||
while (iter && iter->name) {
|
||||
while (iter && iter->info) {
|
||||
if (iter->free_value) {
|
||||
if (iter->value_is_array)
|
||||
g_strfreev ((char **) iter->value);
|
||||
|
|
@ -648,6 +648,19 @@ nmc_free_output_field_values (NmcOutputField fields_array[])
|
|||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
_abstract_info_get_name (const NMMetaAbstractInfo *abstract_info)
|
||||
{
|
||||
const char *n;
|
||||
|
||||
nm_assert (abstract_info);
|
||||
nm_assert (abstract_info->meta_type);
|
||||
nm_assert (abstract_info->meta_type->get_name);
|
||||
n = abstract_info->meta_type->get_name (abstract_info);
|
||||
nm_assert (n && n[0]);
|
||||
return n;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse_output_fields:
|
||||
* @field_str: comma-separated field names to parse
|
||||
|
|
@ -670,110 +683,107 @@ nmc_free_output_field_values (NmcOutputField fields_array[])
|
|||
*/
|
||||
GArray *
|
||||
parse_output_fields (const char *fields_str,
|
||||
const NmcOutputField fields_array[],
|
||||
const NMMetaAbstractInfo *const*fields_array,
|
||||
gboolean parse_groups,
|
||||
GPtrArray **group_fields,
|
||||
GPtrArray **out_group_fields,
|
||||
GError **error)
|
||||
{
|
||||
char **fields, **iter;
|
||||
GArray *array;
|
||||
gs_strfreev char **fields = NULL;
|
||||
const char *const*iter = NULL;
|
||||
gs_unref_ptrarray GPtrArray *group_fields = NULL;
|
||||
gs_unref_array GArray *array = NULL;
|
||||
int i, j;
|
||||
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
||||
g_return_val_if_fail (group_fields == NULL || *group_fields == NULL, NULL);
|
||||
g_return_val_if_fail (!error || !*error, NULL);
|
||||
g_return_val_if_fail (!out_group_fields || !*out_group_fields, NULL);
|
||||
|
||||
array = g_array_new (FALSE, FALSE, sizeof (int));
|
||||
if (parse_groups && group_fields)
|
||||
*group_fields = g_ptr_array_new_full (20, (GDestroyNotify) g_free);
|
||||
if (parse_groups && out_group_fields)
|
||||
group_fields = g_ptr_array_new_full (20, g_free);
|
||||
|
||||
/* Split supplied fields string */
|
||||
fields = g_strsplit_set (fields_str, ",", -1);
|
||||
for (iter = fields; iter && *iter; iter++) {
|
||||
if (!fields_str) {
|
||||
for (i = 0; fields_array[i]; i++) {
|
||||
g_array_append_val (array, i);
|
||||
if (group_fields)
|
||||
g_ptr_array_add (group_fields, NULL);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
fields = _nm_utils_strv_cleanup (g_strsplit_set (fields_str, ",", -1),
|
||||
TRUE,
|
||||
TRUE,
|
||||
FALSE);
|
||||
for (iter = (const char *const*) fields; *iter; iter++) {
|
||||
gs_free char *tmp = NULL;
|
||||
int idx = -1;
|
||||
const char *i_name = *iter;
|
||||
char *right = NULL;
|
||||
|
||||
g_strstrip (*iter);
|
||||
if (parse_groups) {
|
||||
/* e.g. "general.device,general.driver,ip4,ip6" */
|
||||
gboolean found = FALSE;
|
||||
char *left = *iter;
|
||||
char *right = strchr (*iter, '.');
|
||||
|
||||
if (group_fields) {
|
||||
tmp = g_strdup (i_name);
|
||||
i_name = tmp;
|
||||
right = strchr (tmp, '.');
|
||||
if (right)
|
||||
*right++ = '\0';
|
||||
|
||||
for (i = 0; fields_array[i].name; i++) {
|
||||
if (strcasecmp (left, fields_array[i].name) == 0) {
|
||||
const NmcOutputField *valid_names = fields_array[i].group_list;
|
||||
const NMMetaSettingInfoEditor *setting_info = fields_array[i].setting_info;
|
||||
|
||||
idx = i;
|
||||
if (!right && !valid_names && !setting_info) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
if (valid_names) {
|
||||
for (j = 0; valid_names[j].name; j++) {
|
||||
if (!right || strcasecmp (right, valid_names[j].name) == 0) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (setting_info) {
|
||||
for (j = 1; j < setting_info->properties_num; j++) {
|
||||
if (!right || strcasecmp (right, setting_info->properties[j].property_name) == 0) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
/* Add index to array, and field name (or NULL) to group_fields array */
|
||||
g_array_append_val (array, idx);
|
||||
if (group_fields && *group_fields)
|
||||
g_ptr_array_add (*group_fields, g_strdup (right));
|
||||
}
|
||||
if (right)
|
||||
*(right-1) = '.'; /* Restore the original string */
|
||||
} else {
|
||||
/* e.g. "general,ip4,ip6" */
|
||||
for (i = 0; fields_array[i].name; i++) {
|
||||
if (strcasecmp (*iter, fields_array[i].name) == 0) {
|
||||
g_array_append_val (array, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Field was not found - error case */
|
||||
if (fields_array[i].name == NULL) {
|
||||
/* Set GError */
|
||||
if (!strcasecmp (*iter, "all") || !strcasecmp (*iter, "common"))
|
||||
g_set_error (error, NMCLI_ERROR, 0, _("field '%s' has to be alone"), *iter);
|
||||
for (i = 0; fields_array[i]; i++) {
|
||||
const NMMetaAbstractInfo *fi = fields_array[i];
|
||||
gboolean found;
|
||||
|
||||
if (g_ascii_strcasecmp (i_name, _abstract_info_get_name (fi)) != 0)
|
||||
continue;
|
||||
|
||||
if (!right)
|
||||
found = TRUE;
|
||||
else {
|
||||
char *allowed_fields = nmc_get_allowed_fields (fields_array, idx);
|
||||
g_set_error (error, NMCLI_ERROR, 1, _("invalid field '%s'; allowed fields: %s"),
|
||||
*iter, allowed_fields);
|
||||
g_free (allowed_fields);
|
||||
found = FALSE;
|
||||
if (fi->meta_type == &nm_meta_type_setting_info_editor) {
|
||||
const NMMetaSettingInfoEditor *fi_s = &fi->as.setting_info;
|
||||
|
||||
for (j = 1; j < fi_s->properties_num; j++) {
|
||||
if (g_ascii_strcasecmp (right, fi_s->properties[j].property_name) == 0) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (fi->meta_type == &nmc_meta_type_generic_info) {
|
||||
const NmcMetaGenericInfo *fi_g = (const NmcMetaGenericInfo *) fi;
|
||||
|
||||
for (j = 0; fi_g->nested && fi_g->nested[j]; j++) {
|
||||
if (g_ascii_strcasecmp (right, _abstract_info_get_name ((const NMMetaAbstractInfo *) fi_g->nested[j])) == 0) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Free arrays on error */
|
||||
g_array_free (array, TRUE);
|
||||
array = NULL;
|
||||
if (group_fields && *group_fields) {
|
||||
g_ptr_array_free (*group_fields, TRUE);
|
||||
*group_fields = NULL;
|
||||
if (found) {
|
||||
g_array_append_val (array, i);
|
||||
if (group_fields)
|
||||
g_ptr_array_add (group_fields, g_strdup (right));
|
||||
break;
|
||||
}
|
||||
goto done;
|
||||
|
||||
if ( !g_ascii_strcasecmp (i_name, "all")
|
||||
|| !g_ascii_strcasecmp (i_name, "common"))
|
||||
g_set_error (error, NMCLI_ERROR, 0, _("field '%s' has to be alone"), i_name);
|
||||
else {
|
||||
gs_free char *allowed_fields = nmc_get_allowed_fields (fields_array, idx);
|
||||
|
||||
g_set_error (error, NMCLI_ERROR, 1, _("invalid field '%s'; allowed fields: %s"),
|
||||
i_name, allowed_fields);
|
||||
}
|
||||
NM_SET_OUT (out_group_fields, NULL);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
done:
|
||||
if (fields)
|
||||
g_strfreev (fields);
|
||||
return array;
|
||||
|
||||
out:
|
||||
NM_SET_OUT (out_group_fields, g_steal_pointer (&group_fields));
|
||||
return g_steal_pointer (&array);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -786,28 +796,30 @@ done:
|
|||
* Caller is responsible for freeing the array.
|
||||
*/
|
||||
char *
|
||||
nmc_get_allowed_fields (const NmcOutputField fields_array[], int group_idx)
|
||||
nmc_get_allowed_fields (const NMMetaAbstractInfo *const*fields_array, int group_idx)
|
||||
{
|
||||
GString *allowed_fields = g_string_sized_new (256);
|
||||
int i;
|
||||
|
||||
if (group_idx != -1 && fields_array[group_idx].group_list) {
|
||||
const NmcOutputField *second_level = fields_array[group_idx].group_list;
|
||||
if (group_idx != -1 && fields_array[group_idx]->meta_type == &nmc_meta_type_generic_info) {
|
||||
const NmcMetaGenericInfo *const*nested = ((const NmcMetaGenericInfo *) fields_array[group_idx])->nested;
|
||||
const char *name = _abstract_info_get_name (fields_array[group_idx]);
|
||||
|
||||
for (i = 0; second_level[i].name; i++) {
|
||||
for (i = 0; nested && nested[i]; i++) {
|
||||
g_string_append_printf (allowed_fields, "%s.%s,",
|
||||
fields_array[group_idx].name, second_level[i].name);
|
||||
name, _abstract_info_get_name ((const NMMetaAbstractInfo *) nested[i]));
|
||||
}
|
||||
} else if (group_idx != -1 && fields_array[group_idx].setting_info) {
|
||||
const NMMetaSettingInfoEditor *second_level = fields_array[group_idx].setting_info;
|
||||
} else if (group_idx != -1 && fields_array[group_idx]->meta_type == &nm_meta_type_setting_info_editor) {
|
||||
const NMMetaSettingInfoEditor *fi = &fields_array[group_idx]->as.setting_info;
|
||||
const char *name = _abstract_info_get_name (fields_array[group_idx]);
|
||||
|
||||
for (i = 1; i < second_level->properties_num; i++) {
|
||||
for (i = 1; i < fi->properties_num; i++) {
|
||||
g_string_append_printf (allowed_fields, "%s.%s,",
|
||||
fields_array[group_idx].name, second_level->properties[i].property_name);
|
||||
name, fi->properties[i].property_name);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; fields_array[i].name; i++)
|
||||
g_string_append_printf (allowed_fields, "%s,", fields_array[i].name);
|
||||
for (i = 0; fields_array[i]; i++)
|
||||
g_string_append_printf (allowed_fields, "%s,", _abstract_info_get_name (fields_array[i]));
|
||||
}
|
||||
g_string_truncate (allowed_fields, allowed_fields->len - 1);
|
||||
|
||||
|
|
@ -815,14 +827,18 @@ nmc_get_allowed_fields (const NmcOutputField fields_array[], int group_idx)
|
|||
}
|
||||
|
||||
NmcOutputField *
|
||||
nmc_dup_fields_array (NmcOutputField fields[], size_t size, NmcOfFlags flags)
|
||||
nmc_dup_fields_array (const NMMetaAbstractInfo *const*fields, NmcOfFlags flags)
|
||||
{
|
||||
NmcOutputField *row;
|
||||
gsize l;
|
||||
|
||||
row = g_malloc0 (size);
|
||||
memcpy (row, fields, size);
|
||||
for (l = 0; fields[l]; l++) {
|
||||
}
|
||||
|
||||
row = g_new0 (NmcOutputField, l + 1);
|
||||
for (l = 0; fields[l]; l++)
|
||||
row[l].info = fields[l];
|
||||
row[0].flags = flags;
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
|
|
@ -875,7 +891,7 @@ get_value_to_print (NmcColorOption color_option,
|
|||
nm_assert (out_to_free && !*out_to_free);
|
||||
|
||||
if (field_name)
|
||||
value = _(field->name);
|
||||
value = _(_abstract_info_get_name (field->info));
|
||||
else {
|
||||
value = field->value
|
||||
? (is_array
|
||||
|
|
@ -989,7 +1005,7 @@ print_required_fields (const NmcConfig *nmc_config,
|
|||
tmp = g_strdup_printf ("%s%s%s[%d]:",
|
||||
section_prefix ? (const char*) field_values[0].value : "",
|
||||
section_prefix ? "." : "",
|
||||
_(field_values[idx].name),
|
||||
_(_abstract_info_get_name (field_values[idx].info)),
|
||||
j);
|
||||
width1 = strlen (tmp);
|
||||
width2 = nmc_string_screen_width (tmp, NULL);
|
||||
|
|
@ -1009,7 +1025,7 @@ print_required_fields (const NmcConfig *nmc_config,
|
|||
tmp = g_strdup_printf ("%s%s%s:",
|
||||
section_prefix ? hdr_name : "",
|
||||
section_prefix ? "." : "",
|
||||
_(field_values[idx].name));
|
||||
_(_abstract_info_get_name (field_values[idx].info)));
|
||||
width1 = strlen (tmp);
|
||||
width2 = nmc_string_screen_width (tmp, NULL);
|
||||
g_print ("%-*s%s\n", terse ? 0 : ML_VALUE_INDENT+width1-width2, tmp, print_val);
|
||||
|
|
@ -1091,7 +1107,7 @@ print_data_prepare_width (GPtrArray *output_data)
|
|||
|
||||
/* How many fields? */
|
||||
row = g_ptr_array_index (output_data, 0);
|
||||
while (row->name) {
|
||||
while (row->info) {
|
||||
num_fields++;
|
||||
row++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,12 +61,12 @@ void set_val_color_all (NmcOutputField fields_array[], NmcTermColor color);
|
|||
void set_val_color_fmt_all (NmcOutputField fields_array[], NmcTermFormat format);
|
||||
void nmc_free_output_field_values (NmcOutputField fields_array[]);
|
||||
GArray *parse_output_fields (const char *fields_str,
|
||||
const NmcOutputField fields_array[],
|
||||
const NMMetaAbstractInfo *const* fields_array,
|
||||
gboolean parse_groups,
|
||||
GPtrArray **group_fields,
|
||||
GError **error);
|
||||
char *nmc_get_allowed_fields (const NmcOutputField fields_array[], int group_idx);
|
||||
NmcOutputField *nmc_dup_fields_array (NmcOutputField fields[], size_t size, guint32 flags);
|
||||
char *nmc_get_allowed_fields (const NMMetaAbstractInfo *const*fields_array, int group_idx);
|
||||
NmcOutputField *nmc_dup_fields_array (const NMMetaAbstractInfo *const*fields, NmcOfFlags flags);
|
||||
void nmc_empty_output_fields (NmcOutputData *output_data);
|
||||
void print_required_fields (const NmcConfig *nmc_config,
|
||||
NmcOfFlags of_flags,
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ nm_meta_setting_info_editor_find_by_gtype (GType gtype)
|
|||
return setting_info;
|
||||
}
|
||||
|
||||
static const NMMetaSettingInfoEditor *
|
||||
const NMMetaSettingInfoEditor *
|
||||
nm_meta_setting_info_editor_find_by_setting (NMSetting *setting)
|
||||
{
|
||||
const NMMetaSettingInfoEditor *setting_info;
|
||||
|
|
@ -81,10 +81,7 @@ nm_meta_setting_info_editor_find_by_setting (NMSetting *setting)
|
|||
|
||||
setting_info = nm_meta_setting_info_editor_find_by_gtype (G_OBJECT_TYPE (setting));
|
||||
|
||||
if (!setting_info)
|
||||
return NULL;
|
||||
|
||||
g_return_val_if_fail (setting_info == nm_meta_setting_info_editor_find_by_name (nm_setting_get_name (setting)), NULL);
|
||||
nm_assert (setting_info == nm_meta_setting_info_editor_find_by_name (nm_setting_get_name (setting)));
|
||||
|
||||
return setting_info;
|
||||
}
|
||||
|
|
@ -140,3 +137,44 @@ nm_meta_property_info_find_by_setting (NMSetting *setting, const char *property_
|
|||
|
||||
return property_info;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* this basically returns NMMetaSettingType.properties, but with type
|
||||
* (NMMetaPropertyInfo **) instead of (NMMetaPropertyInfo *), which is
|
||||
* required by some APIs. */
|
||||
const NMMetaPropertyInfo *const*
|
||||
nm_property_infos_for_setting_type (NMMetaSettingType setting_type)
|
||||
{
|
||||
static const NMMetaPropertyInfo **cache[_NM_META_SETTING_TYPE_NUM] = { NULL };
|
||||
const NMMetaPropertyInfo **p;
|
||||
guint i;
|
||||
|
||||
nm_assert (setting_type < _NM_META_SETTING_TYPE_NUM);
|
||||
nm_assert (setting_type == 0 || setting_type > 0);
|
||||
|
||||
if (G_UNLIKELY (!(p = cache[setting_type]))) {
|
||||
const NMMetaSettingInfoEditor *setting_info = &nm_meta_setting_infos_editor[setting_type];
|
||||
|
||||
p = g_new (const NMMetaPropertyInfo *, setting_info->properties_num + 1);
|
||||
for (i = 0; i < setting_info->properties_num; i++)
|
||||
p[i] = &setting_info->properties[i];
|
||||
p[i] = NULL;
|
||||
cache[setting_type] = p;
|
||||
}
|
||||
return (const NMMetaPropertyInfo *const*) p;
|
||||
}
|
||||
|
||||
const NMMetaSettingInfoEditor *const*
|
||||
nm_meta_setting_infos_editor_p (void)
|
||||
{
|
||||
static const NMMetaSettingInfoEditor *cache[_NM_META_SETTING_TYPE_NUM + 1] = { NULL };
|
||||
guint i;
|
||||
|
||||
if (G_UNLIKELY (!cache[0])) {
|
||||
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++)
|
||||
cache[i] = &nm_meta_setting_infos_editor[i];
|
||||
}
|
||||
return cache;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
const NMMetaSettingInfoEditor *nm_meta_setting_info_editor_find_by_name (const char *setting_name);
|
||||
const NMMetaSettingInfoEditor *nm_meta_setting_info_editor_find_by_gtype (GType gtype);
|
||||
const NMMetaSettingInfoEditor *nm_meta_setting_info_editor_find_by_setting (NMSetting *setting);
|
||||
|
||||
const NMMetaPropertyInfo *nm_meta_setting_info_editor_get_property_info (const NMMetaSettingInfoEditor *setting_info,
|
||||
const char *property_name);
|
||||
|
|
@ -37,4 +38,10 @@ const NMMetaPropertyInfo *nm_meta_property_info_find_by_setting (NMSetting *sett
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
const NMMetaPropertyInfo *const*nm_property_infos_for_setting_type (NMMetaSettingType setting_type);
|
||||
|
||||
const NMMetaSettingInfoEditor *const*nm_meta_setting_infos_editor_p (void);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#endif /* _NM_META_SETTING_ACCESS_H__ */
|
||||
|
|
|
|||
|
|
@ -6580,7 +6580,7 @@ static const NMMetaPropertyInfo property_infos_WIRELESS_SECURITY[] = {
|
|||
},
|
||||
};
|
||||
|
||||
const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[_NM_META_SETTING_TYPE_NUM] = {
|
||||
const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = {
|
||||
#define SETTING_INFO(type) \
|
||||
[NM_META_SETTING_TYPE_##type] = { \
|
||||
.meta_type = &nm_meta_type_setting_info_editor, \
|
||||
|
|
@ -6623,10 +6623,26 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[_NM_META_SETTING_TYPE
|
|||
SETTING_INFO (WIRELESS_SECURITY),
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const char *
|
||||
_meta_type_setting_info_editor_get_name (const NMMetaAbstractInfo *abstract_info)
|
||||
{
|
||||
return ((const NMMetaSettingInfoEditor *) abstract_info)->general->setting_name;
|
||||
}
|
||||
|
||||
static const char *
|
||||
_meta_type_property_info_get_name (const NMMetaAbstractInfo *abstract_info)
|
||||
{
|
||||
return ((const NMMetaPropertyInfo *) abstract_info)->property_name;
|
||||
}
|
||||
|
||||
const NMMetaType nm_meta_type_setting_info_editor = {
|
||||
.type_name = "setting_info_editor",
|
||||
.type_name = "setting_info_editor",
|
||||
.get_name = _meta_type_setting_info_editor_get_name,
|
||||
};
|
||||
|
||||
const NMMetaType nm_meta_type_property_info = {
|
||||
.type_name = "property_info",
|
||||
.type_name = "property_info",
|
||||
.get_name = _meta_type_property_info_get_name,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ struct _NMMetaSettingInfoEditor {
|
|||
|
||||
struct _NMMetaType {
|
||||
const char *type_name;
|
||||
const char *(*get_name) (const NMMetaAbstractInfo *abstract_info);
|
||||
};
|
||||
|
||||
struct _NMMetaAbstractInfo {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue