diff --git a/cli/src/connections.c b/cli/src/connections.c index 46ff0daa59..445d35174d 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -102,6 +102,7 @@ static NmcOutputField nmc_fields_settings_names[] = { SETTING_FIELD (NM_SETTING_OLPC_MESH_SETTING_NAME, 0), /* 13 */ SETTING_FIELD (NM_SETTING_VPN_SETTING_NAME, 0), /* 14 */ SETTING_FIELD (NM_SETTING_WIMAX_SETTING_NAME, 0), /* 15 */ + SETTING_FIELD (NM_SETTING_INFINIBAND_SETTING_NAME, 0), /* 16 */ {NULL, NULL, 0, NULL, 0} }; #define NMC_FIELDS_SETTINGS_NAMES_ALL_X NM_SETTING_CONNECTION_SETTING_NAME","\ @@ -118,7 +119,8 @@ static NmcOutputField nmc_fields_settings_names[] = { NM_SETTING_CDMA_SETTING_NAME","\ NM_SETTING_BLUETOOTH_SETTING_NAME","\ NM_SETTING_OLPC_MESH_SETTING_NAME","\ - NM_SETTING_VPN_SETTING_NAME + NM_SETTING_VPN_SETTING_NAME","\ + NM_SETTING_INFINIBAND_SETTING_NAME #if WITH_WIMAX #define NMC_FIELDS_SETTINGS_NAMES_ALL NMC_FIELDS_SETTINGS_NAMES_ALL_X","\ NM_SETTING_WIMAX_SETTING_NAME @@ -364,6 +366,15 @@ nmc_connection_detail (NMConnection *connection, NmCli *nmc) } } #endif + + if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[16].name)) { + NMSettingInfiniband *s_infiniband = nm_connection_get_setting_infiniband (connection); + if (s_infiniband) { + setting_infiniband_details (s_infiniband, nmc); + was_output = TRUE; + continue; + } + } } if (print_settings_array) diff --git a/cli/src/settings.c b/cli/src/settings.c index cde6994ff2..13592a3e5c 100644 --- a/cli/src/settings.c +++ b/cli/src/settings.c @@ -19,6 +19,8 @@ #include "config.h" +#include "net/if_arp.h" + #include #include #include @@ -438,6 +440,18 @@ static NmcOutputField nmc_fields_setting_wimax[] = { NM_SETTING_WIMAX_NETWORK_NAME #define NMC_FIELDS_SETTING_WIMAX_COMMON NMC_FIELDS_SETTING_WIMAX_ALL +/* Available fields for NM_SETTING_INFINIBAND_SETTING_NAME */ +static NmcOutputField nmc_fields_setting_infiniband[] = { + SETTING_FIELD ("name", 12), /* 0 */ + SETTING_FIELD (NM_SETTING_INFINIBAND_MAC_ADDRESS, 61), /* 1 */ + SETTING_FIELD (NM_SETTING_INFINIBAND_MTU, 6), /* 2 */ + {NULL, NULL, 0, NULL, 0} +}; +#define NMC_FIELDS_SETTING_INFINIBAND_ALL "name"","\ + NM_SETTING_INFINIBAND_MAC_ADDRESS","\ + NM_SETTING_INFINIBAND_MTU +#define NMC_FIELDS_SETTING_INFINIBAND_COMMON NMC_FIELDS_SETTING_INFINIBAND_ALL + static char * wep_key_type_to_string (NMWepKeyType type) @@ -1505,3 +1519,37 @@ setting_wimax_details (NMSettingWimax *s_wimax, NmCli *nmc) return TRUE; } +gboolean +setting_infiniband_details (NMSettingInfiniband *s_infiniband, NmCli *nmc) +{ + const GByteArray *mac; + char *mtu_str, *mac_str = NULL; + guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0; + guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0; + guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0; + + g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (s_infiniband), FALSE); + + nmc->allowed_fields = nmc_fields_setting_infiniband; + nmc->print_fields.indices = parse_output_fields (NMC_FIELDS_SETTING_INFINIBAND_ALL, nmc->allowed_fields, NULL); + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print field names */ + + mac = nm_setting_infiniband_get_mac_address (s_infiniband); + if (mac) + mac_str = nm_utils_hwaddr_ntoa (mac->data, ARPHRD_INFINIBAND); + mtu_str = g_strdup_printf ("%d", nm_setting_infiniband_get_mtu (s_infiniband)); + + nmc->allowed_fields[0].value = NM_SETTING_INFINIBAND_SETTING_NAME; + nmc->allowed_fields[1].value = mac_str; + nmc->allowed_fields[2].value = strcmp (mtu_str, "0") ? mtu_str : _("auto"); + + nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX; + print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */ + + g_free (mac_str); + g_free (mtu_str); + + return TRUE; +} + diff --git a/cli/src/settings.h b/cli/src/settings.h index bedf7e8be2..f54b48953d 100644 --- a/cli/src/settings.h +++ b/cli/src/settings.h @@ -36,6 +36,7 @@ #include #include #include +#include #include "nmcli.h" #include "utils.h" @@ -57,5 +58,6 @@ gboolean setting_bluetooth_details (NMSettingBluetooth *s_bluetooth, NmCli *nmc) gboolean setting_olpc_mesh_details (NMSettingOlpcMesh *s_olpc_mesh, NmCli *nmc); gboolean setting_vpn_details (NMSettingVPN *s_vpn, NmCli *nmc); gboolean setting_wimax_details (NMSettingWimax *s_wimax, NmCli *nmc); +gboolean setting_infiniband_details (NMSettingInfiniband *s_infiniband, NmCli *nmc); #endif /* NMC_SETTINGS_H */