cli: add -f argument completion

This commit is contained in:
Lubomir Rintel 2016-07-27 16:24:30 +02:00
parent 2e5f8d7de6
commit 8cc6ce7e44
7 changed files with 185 additions and 54 deletions

View file

@ -86,4 +86,9 @@ void nmc_complete_strings (const char *prefix, ...) G_GNUC_NULL_TERMINATED;
void nmc_complete_bool (const char *prefix);
extern NmcOutputField nmc_fields_ip4_config[];
extern NmcOutputField nmc_fields_dhcp4_config[];
extern NmcOutputField nmc_fields_ip6_config[];
extern NmcOutputField nmc_fields_dhcp6_config[];
#endif /* NMC_COMMON_H */

View file

@ -115,7 +115,7 @@ struct _OptionInfo {
#define BASE_PROMPT "nmcli> "
/* Available fields for 'connection show' */
static NmcOutputField nmc_fields_con_show[] = {
NmcOutputField nmc_fields_con_show[] = {
{"NAME", N_("NAME")}, /* 0 */
{"UUID", N_("UUID")}, /* 1 */
{"TYPE", N_("TYPE")}, /* 2 */
@ -138,39 +138,8 @@ static NmcOutputField nmc_fields_con_show[] = {
/* Helper macro to define fields */
#define SETTING_FIELD(setting, props) { setting, N_(setting), 0, props, NULL, FALSE, FALSE, 0 }
/* defined in settings.c */
extern NmcOutputField nmc_fields_setting_connection[];
extern NmcOutputField nmc_fields_setting_wired[];
extern NmcOutputField nmc_fields_setting_8021X[];
extern NmcOutputField nmc_fields_setting_wireless[];
extern NmcOutputField nmc_fields_setting_wireless_security[];
extern NmcOutputField nmc_fields_setting_ip4_config[];
extern NmcOutputField nmc_fields_setting_ip6_config[];
extern NmcOutputField nmc_fields_setting_serial[];
extern NmcOutputField nmc_fields_setting_ppp[];
extern NmcOutputField nmc_fields_setting_pppoe[];
extern NmcOutputField nmc_fields_setting_adsl[];
extern NmcOutputField nmc_fields_setting_gsm[];
extern NmcOutputField nmc_fields_setting_cdma[];
extern NmcOutputField nmc_fields_setting_bluetooth[];
extern NmcOutputField nmc_fields_setting_olpc_mesh[];
extern NmcOutputField nmc_fields_setting_vpn[];
extern NmcOutputField nmc_fields_setting_wimax[];
extern NmcOutputField nmc_fields_setting_infiniband[];
extern NmcOutputField nmc_fields_setting_bond[];
extern NmcOutputField nmc_fields_setting_vlan[];
extern NmcOutputField nmc_fields_setting_bridge[];
extern NmcOutputField nmc_fields_setting_bridge_port[];
extern NmcOutputField nmc_fields_setting_team[];
extern NmcOutputField nmc_fields_setting_team_port[];
extern NmcOutputField nmc_fields_setting_dcb[];
extern NmcOutputField nmc_fields_setting_tun[];
extern NmcOutputField nmc_fields_setting_ip_tunnel[];
extern NmcOutputField nmc_fields_setting_macvlan[];
extern NmcOutputField nmc_fields_setting_vxlan[];
/* Available settings for 'connection show <con>' - profile part */
static NmcOutputField nmc_fields_settings_names[] = {
NmcOutputField nmc_fields_settings_names[] = {
SETTING_FIELD (NM_SETTING_CONNECTION_SETTING_NAME, nmc_fields_setting_connection + 1), /* 0 */
SETTING_FIELD (NM_SETTING_WIRED_SETTING_NAME, nmc_fields_setting_wired + 1), /* 1 */
SETTING_FIELD (NM_SETTING_802_1X_SETTING_NAME, nmc_fields_setting_8021X + 1), /* 2 */
@ -234,7 +203,7 @@ static NmcOutputField nmc_fields_settings_names[] = {
/* Active connection data */
/* Available fields for GENERAL group */
static NmcOutputField nmc_fields_con_active_details_general[] = {
NmcOutputField nmc_fields_con_active_details_general[] = {
{"GROUP", N_("GROUP")}, /* 0 */
{"NAME", N_("NAME")}, /* 1 */
{"UUID", N_("UUID")}, /* 2 */
@ -256,7 +225,7 @@ static NmcOutputField nmc_fields_con_active_details_general[] = {
/* IP group is handled by common.c */
/* Available fields for VPN group */
static NmcOutputField nmc_fields_con_active_details_vpn[] = {
NmcOutputField nmc_fields_con_active_details_vpn[] = {
{"GROUP", N_("GROUP")}, /* 0 */
{"TYPE", N_("TYPE")}, /* 1 */
{"USERNAME", N_("USERNAME")}, /* 2 */
@ -275,7 +244,7 @@ extern NmcOutputField nmc_fields_dhcp4_config[];
extern NmcOutputField nmc_fields_dhcp6_config[];
/* Available fields for 'connection show <con>' - active part */
static NmcOutputField nmc_fields_con_active_details_groups[] = {
NmcOutputField nmc_fields_con_active_details_groups[] = {
{"GENERAL", N_("GENERAL"), 0, nmc_fields_con_active_details_general + 1}, /* 0 */
{"IP4", N_("IP4"), 0, nmc_fields_ip4_config + 1 }, /* 1 */
{"DHCP4", N_("DHCP4"), 0, nmc_fields_dhcp4_config + 1 }, /* 2 */

View file

@ -35,4 +35,10 @@ 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[];
#endif /* NMC_CONNECTIONS_H */

View file

@ -37,7 +37,7 @@
#define PROMPT_INTERFACES _("Interface(s): ")
/* Available fields for 'device status' */
static NmcOutputField nmc_fields_dev_status[] = {
NmcOutputField nmc_fields_dev_status[] = {
{"DEVICE", N_("DEVICE")}, /* 0 */
{"TYPE", N_("TYPE")}, /* 1 */
{"STATE", N_("STATE")}, /* 2 */
@ -52,7 +52,7 @@ static NmcOutputField nmc_fields_dev_status[] = {
/* Available fields for 'device show' - GENERAL part */
static NmcOutputField nmc_fields_dev_show_general[] = {
NmcOutputField nmc_fields_dev_show_general[] = {
{"NAME", N_("NAME")}, /* 0 */
{"DEVICE", N_("DEVICE")}, /* 1 */
{"TYPE", N_("TYPE")}, /* 2 */
@ -86,7 +86,7 @@ static NmcOutputField nmc_fields_dev_show_general[] = {
#define NMC_FIELDS_DEV_SHOW_GENERAL_COMMON "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,HWADDR,STATE"
/* Available fields for 'device show' - CONNECTIONS part */
static NmcOutputField nmc_fields_dev_show_connections[] = {
NmcOutputField nmc_fields_dev_show_connections[] = {
{"NAME", N_("NAME")}, /* 0 */
{"AVAILABLE-CONNECTION-PATHS", N_("AVAILABLE-CONNECTION-PATHS")}, /* 1 */
{"AVAILABLE-CONNECTIONS", N_("AVAILABLE-CONNECTIONS")}, /* 2 */
@ -96,7 +96,7 @@ static NmcOutputField nmc_fields_dev_show_connections[] = {
#define NMC_FIELDS_DEV_SHOW_CONNECTIONS_COMMON "AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
/* Available fields for 'device show' - CAPABILITIES part */
static NmcOutputField nmc_fields_dev_show_cap[] = {
NmcOutputField nmc_fields_dev_show_cap[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CARRIER-DETECT", N_("CARRIER-DETECT")}, /* 1 */
{"SPEED", N_("SPEED")}, /* 2 */
@ -107,7 +107,7 @@ static NmcOutputField nmc_fields_dev_show_cap[] = {
#define NMC_FIELDS_DEV_SHOW_CAP_COMMON "NAME,CARRIER-DETECT,SPEED,IS-SOFTWARE"
/* Available fields for 'device show' - wired properties part */
static NmcOutputField nmc_fields_dev_show_wired_prop[] = {
NmcOutputField nmc_fields_dev_show_wired_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CARRIER", N_("CARRIER")}, /* 1 */
{"S390-SUBCHANNELS", N_("S390-SUBCHANNELS")}, /* 2 */
@ -117,7 +117,7 @@ static NmcOutputField nmc_fields_dev_show_wired_prop[] = {
#define NMC_FIELDS_DEV_SHOW_WIRED_PROP_COMMON "NAME,CARRIER,S390-SUBCHANNELS"
/* Available fields for 'device show' - wireless properties part */
static NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"WEP", N_("WEP")}, /* 1 */
{"WPA", N_("WPA")}, /* 2 */
@ -134,7 +134,7 @@ static NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
#define NMC_FIELDS_DEV_SHOW_WIFI_PROP_COMMON "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
/* Available fields for 'device show' - wimax properties part */
static NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CTR-FREQ", N_("CTR-FREQ")}, /* 1 */
{"RSSI", N_("RSSI")}, /* 2 */
@ -147,7 +147,7 @@ static NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
#define NMC_FIELDS_DEV_SHOW_WIMAX_PROP_COMMON "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
/* Available fields for 'device wifi list' */
static NmcOutputField nmc_fields_dev_wifi_list[] = {
NmcOutputField nmc_fields_dev_wifi_list[] = {
{"NAME", N_("NAME")}, /* 0 */
{"SSID", N_("SSID")}, /* 1 */
{"SSID-HEX", N_("SSID-HEX")}, /* 2 */
@ -173,7 +173,7 @@ static NmcOutputField nmc_fields_dev_wifi_list[] = {
#define NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIFI_LIST_COMMON
/* Available fields for 'device wimax list' */
static NmcOutputField nmc_fields_dev_wimax_list[] = {
NmcOutputField nmc_fields_dev_wimax_list[] = {
{"NAME", N_("NAME")}, /* 0 */
{"NSP", N_("NSP")}, /* 1 */
{"SIGNAL", N_("SIGNAL")}, /* 2 */
@ -188,7 +188,7 @@ static NmcOutputField nmc_fields_dev_wimax_list[] = {
#define NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIMAX_LIST_COMMON
/* Available fields for 'device show' - BOND, BRIDGE part */
static NmcOutputField nmc_fields_dev_show_master_prop[] = {
NmcOutputField nmc_fields_dev_show_master_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"SLAVES", N_("SLAVES")}, /* 1 */
{NULL, NULL}
@ -197,7 +197,7 @@ static NmcOutputField nmc_fields_dev_show_master_prop[] = {
#define NMC_FIELDS_DEV_SHOW_MASTER_PROP_COMMON "NAME,SLAVES"
/* Available fields for 'device show' - TEAM part */
static NmcOutputField nmc_fields_dev_show_team_prop[] = {
NmcOutputField nmc_fields_dev_show_team_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"SLAVES", N_("SLAVES")}, /* 1 */
{"CONFIG", N_("CONFIG")}, /* 2 */
@ -207,7 +207,7 @@ static NmcOutputField nmc_fields_dev_show_team_prop[] = {
#define NMC_FIELDS_DEV_SHOW_TEAM_PROP_COMMON "NAME,SLAVES,CONFIG"
/* Available fields for 'device show' - VLAN part */
static NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"PARENT", N_("PARENT")}, /* 1 */
{"ID", N_("ID")}, /* 2 */
@ -217,7 +217,7 @@ static NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,PARENT,ID"
/* Available fields for 'device show' - BLUETOOTH part */
static NmcOutputField nmc_fields_dev_show_bluetooth[] = {
NmcOutputField nmc_fields_dev_show_bluetooth[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CAPABILITIES", N_("CAPABILITIES")}, /* 1 */
{NULL, NULL}
@ -232,7 +232,7 @@ extern NmcOutputField nmc_fields_dhcp4_config[];
extern NmcOutputField nmc_fields_dhcp6_config[];
/* Available sections for 'device show' */
static NmcOutputField nmc_fields_dev_show_sections[] = {
NmcOutputField nmc_fields_dev_show_sections[] = {
{"GENERAL", N_("GENERAL"), 0, nmc_fields_dev_show_general + 1 }, /* 0 */
{"CAPABILITIES", N_("CAPABILITIES"), 0, nmc_fields_dev_show_cap + 1 }, /* 1 */
{"WIFI-PROPERTIES", N_("WIFI-PROPERTIES"), 0, nmc_fields_dev_show_wifi_prop + 1 }, /* 2 */
@ -258,7 +258,7 @@ static NmcOutputField nmc_fields_dev_show_sections[] = {
"GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
/* Available fields for 'device lldp' */
static NmcOutputField nmc_fields_dev_lldp_list[] = {
NmcOutputField nmc_fields_dev_lldp_list[] = {
{"NAME", N_("NAME")}, /* 0 */
{"DEVICE", N_("DEVICE")}, /* 1 */
{"CHASSIS-ID", N_("CHASSIS-ID")}, /* 2 */

View file

@ -34,4 +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[];
#endif /* NMC_DEVICES_H */

View file

@ -41,6 +41,7 @@
#include "devices.h"
#include "general.h"
#include "agent.h"
#include "settings.h"
#if defined(NM_DIST_VERSION)
# define NMCLI_VERSION NM_DIST_VERSION
@ -64,6 +65,105 @@ GMainLoop *loop = NULL;
static sigset_t signal_set;
struct termios termios_orig;
static void
complete_field (GHashTable *h, const char *setting, NmcOutputField 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));
}
}
static void
complete_one (gpointer key, gpointer value, gpointer user_data)
{
const char *prefix = user_data;
const char *name = key;
const char *last;
last = strrchr (prefix, ',');
if (last)
last++;
else
last = prefix;
if ((!*last && !strchr (name, '.')) || matches (last, name) == 0) {
g_print ("%.*s%s%s\n", (int)(last-prefix), prefix, name,
strcmp (last, name) == 0 ? "," : "");
}
}
static void
complete_fields (const char *prefix)
{
GHashTable *h;
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, "connection", nmc_fields_setting_connection);
complete_field (h, "wired", nmc_fields_setting_wired);
complete_field (h, "8021X", nmc_fields_setting_8021X);
complete_field (h, "wireless", nmc_fields_setting_wireless);
complete_field (h, "wireless_security", nmc_fields_setting_wireless_security);
complete_field (h, "ip4-config", nmc_fields_setting_ip4_config);
complete_field (h, "ip6-config", nmc_fields_setting_ip6_config);
complete_field (h, "serial", nmc_fields_setting_serial);
complete_field (h, "ppp", nmc_fields_setting_ppp);
complete_field (h, "pppoe", nmc_fields_setting_pppoe);
complete_field (h, "adsl", nmc_fields_setting_adsl);
complete_field (h, "gsm", nmc_fields_setting_gsm);
complete_field (h, "cdma", nmc_fields_setting_cdma);
complete_field (h, "bluetooth", nmc_fields_setting_bluetooth);
complete_field (h, "olpc-mesh", nmc_fields_setting_olpc_mesh);
complete_field (h, "vpn", nmc_fields_setting_vpn);
complete_field (h, "wimax", nmc_fields_setting_wimax);
complete_field (h, "infiniband", nmc_fields_setting_infiniband);
complete_field (h, "bond", nmc_fields_setting_bond);
complete_field (h, "vlan", nmc_fields_setting_vlan);
complete_field (h, "bridge", nmc_fields_setting_bridge);
complete_field (h, "bridge-port", nmc_fields_setting_bridge_port);
complete_field (h, "team", nmc_fields_setting_team);
complete_field (h, "team0port", nmc_fields_setting_team_port);
complete_field (h, "dcb", nmc_fields_setting_dcb);
complete_field (h, "tun", nmc_fields_setting_tun);
complete_field (h, "ip-tunnel", nmc_fields_setting_ip_tunnel);
complete_field (h, "macvlan", nmc_fields_setting_macvlan);
complete_field (h, "vxlan", nmc_fields_setting_vxlan);
g_hash_table_foreach (h, complete_one, (gpointer) prefix);
g_hash_table_destroy (h);
}
/* Get an error quark for use with GError */
GQuark
@ -188,7 +288,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
nmc_complete_strings (argv[0], "tabular", "multiline", NULL);
if (argc == 1 && nmc->complete)
nmc_complete_strings (argv[0], "tabular", "multiline", NULL);
if (matches (argv[0], "tabular") == 0)
nmc->multiline_output = FALSE;
else if (matches (argv[0], "multiline") == 0)
@ -204,7 +305,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
nmc_complete_strings (argv[0], "yes", "no", "auto", NULL);
if (argc == 1 && nmc->complete)
nmc_complete_strings (argv[0], "yes", "no", "auto", NULL);
if (matches (argv[0], "auto") == 0)
nmc->use_colors = NMC_USE_COLOR_AUTO;
else if (matches (argv[0], "yes") == 0)
@ -222,7 +324,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
nmc_complete_strings (argv[0], "yes", "no", NULL);
if (argc == 1 && nmc->complete)
nmc_complete_strings (argv[0], "yes", "no", NULL);
if (matches (argv[0], "yes") == 0)
nmc->escape_values = TRUE;
else if (matches (argv[0], "no") == 0)
@ -238,6 +341,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
if (argc == 1 && nmc->complete)
complete_fields (argv[0]);
nmc->required_fields = g_strdup (argv[0]);
} else if (matches (opt, "-nocheck") == 0) {
/* ignore for backward compatibility */

View file

@ -63,4 +63,34 @@ gboolean nmc_property_set_gvalue (NMSetting *setting, const char *prop, GValue *
gboolean setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets);
extern NmcOutputField nmc_fields_setting_connection[];
extern NmcOutputField nmc_fields_setting_wired[];
extern NmcOutputField nmc_fields_setting_8021X[];
extern NmcOutputField nmc_fields_setting_wireless[];
extern NmcOutputField nmc_fields_setting_wireless_security[];
extern NmcOutputField nmc_fields_setting_ip4_config[];
extern NmcOutputField nmc_fields_setting_ip6_config[];
extern NmcOutputField nmc_fields_setting_serial[];
extern NmcOutputField nmc_fields_setting_ppp[];
extern NmcOutputField nmc_fields_setting_pppoe[];
extern NmcOutputField nmc_fields_setting_adsl[];
extern NmcOutputField nmc_fields_setting_gsm[];
extern NmcOutputField nmc_fields_setting_cdma[];
extern NmcOutputField nmc_fields_setting_bluetooth[];
extern NmcOutputField nmc_fields_setting_olpc_mesh[];
extern NmcOutputField nmc_fields_setting_vpn[];
extern NmcOutputField nmc_fields_setting_wimax[];
extern NmcOutputField nmc_fields_setting_infiniband[];
extern NmcOutputField nmc_fields_setting_bond[];
extern NmcOutputField nmc_fields_setting_vlan[];
extern NmcOutputField nmc_fields_setting_bridge[];
extern NmcOutputField nmc_fields_setting_bridge_port[];
extern NmcOutputField nmc_fields_setting_team[];
extern NmcOutputField nmc_fields_setting_team_port[];
extern NmcOutputField nmc_fields_setting_dcb[];
extern NmcOutputField nmc_fields_setting_tun[];
extern NmcOutputField nmc_fields_setting_ip_tunnel[];
extern NmcOutputField nmc_fields_setting_macvlan[];
extern NmcOutputField nmc_fields_setting_vxlan[];
#endif /* NMC_SETTINGS_H */