/* nmcli - command-line tool to control NetworkManager * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Copyright 2010 - 2015 Red Hat, Inc. */ #include "nm-default.h" #include "settings.h" #include #include #include "utils.h" #include "common.h" /* Forward declarations */ static char *wep_key_type_to_string (NMWepKeyType type); typedef enum { NMC_PROPERTY_GET_PRETTY, NMC_PROPERTY_GET_PARSABLE, } NmcPropertyGetType; /* Helper macro to define fields */ #define SETTING_FIELD(setting) { setting, N_(setting), 0, NULL, FALSE, FALSE, 0 } /* Available fields for NM_SETTING_CONNECTION_SETTING_NAME */ NmcOutputField nmc_fields_setting_connection[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_CONNECTION_ID), /* 1 */ SETTING_FIELD (NM_SETTING_CONNECTION_UUID), /* 2 */ SETTING_FIELD (NM_SETTING_CONNECTION_INTERFACE_NAME), /* 3 */ SETTING_FIELD (NM_SETTING_CONNECTION_TYPE), /* 4 */ SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT), /* 5 */ SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY), /* 6 */ SETTING_FIELD (NM_SETTING_CONNECTION_TIMESTAMP), /* 7 */ SETTING_FIELD (NM_SETTING_CONNECTION_READ_ONLY), /* 8 */ SETTING_FIELD (NM_SETTING_CONNECTION_PERMISSIONS), /* 9 */ SETTING_FIELD (NM_SETTING_CONNECTION_ZONE), /* 10 */ SETTING_FIELD (NM_SETTING_CONNECTION_MASTER), /* 11 */ SETTING_FIELD (NM_SETTING_CONNECTION_SLAVE_TYPE), /* 12 */ SETTING_FIELD (NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES), /* 13 */ SETTING_FIELD (NM_SETTING_CONNECTION_SECONDARIES), /* 14 */ SETTING_FIELD (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT), /* 15 */ SETTING_FIELD (NM_SETTING_CONNECTION_METERED), /* 16 */ SETTING_FIELD (NM_SETTING_CONNECTION_LLDP), /* 17 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_CONNECTION_ALL "name"","\ NM_SETTING_CONNECTION_ID","\ NM_SETTING_CONNECTION_UUID","\ NM_SETTING_CONNECTION_INTERFACE_NAME","\ NM_SETTING_CONNECTION_TYPE","\ NM_SETTING_CONNECTION_AUTOCONNECT","\ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY","\ NM_SETTING_CONNECTION_TIMESTAMP","\ NM_SETTING_CONNECTION_READ_ONLY","\ NM_SETTING_CONNECTION_PERMISSIONS","\ NM_SETTING_CONNECTION_ZONE","\ NM_SETTING_CONNECTION_MASTER","\ NM_SETTING_CONNECTION_SLAVE_TYPE","\ NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES","\ NM_SETTING_CONNECTION_SECONDARIES","\ NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT","\ NM_SETTING_CONNECTION_METERED","\ NM_SETTING_CONNECTION_LLDP /* Available fields for NM_SETTING_WIRED_SETTING_NAME */ NmcOutputField nmc_fields_setting_wired[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_WIRED_PORT), /* 1 */ SETTING_FIELD (NM_SETTING_WIRED_SPEED), /* 2 */ SETTING_FIELD (NM_SETTING_WIRED_DUPLEX), /* 3 */ SETTING_FIELD (NM_SETTING_WIRED_AUTO_NEGOTIATE), /* 4 */ SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS), /* 5 */ SETTING_FIELD (NM_SETTING_WIRED_CLONED_MAC_ADDRESS), /* 6 */ SETTING_FIELD (NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST), /* 7 */ SETTING_FIELD (NM_SETTING_WIRED_MTU), /* 8 */ SETTING_FIELD (NM_SETTING_WIRED_S390_SUBCHANNELS), /* 9 */ SETTING_FIELD (NM_SETTING_WIRED_S390_NETTYPE), /* 10 */ SETTING_FIELD (NM_SETTING_WIRED_S390_OPTIONS), /* 11 */ SETTING_FIELD (NM_SETTING_WIRED_WAKE_ON_LAN), /* 12 */ SETTING_FIELD (NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD), /* 13 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_WIRED_ALL "name"","\ NM_SETTING_WIRED_PORT","\ NM_SETTING_WIRED_SPEED","\ NM_SETTING_WIRED_DUPLEX","\ NM_SETTING_WIRED_AUTO_NEGOTIATE","\ NM_SETTING_WIRED_MAC_ADDRESS","\ NM_SETTING_WIRED_CLONED_MAC_ADDRESS","\ NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST","\ NM_SETTING_WIRED_MTU","\ NM_SETTING_WIRED_S390_SUBCHANNELS","\ NM_SETTING_WIRED_S390_NETTYPE","\ NM_SETTING_WIRED_S390_OPTIONS","\ NM_SETTING_WIRED_WAKE_ON_LAN","\ NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD /* Available fields for NM_SETTING_802_1X_SETTING_NAME */ NmcOutputField nmc_fields_setting_8021X[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_802_1X_EAP), /* 1 */ SETTING_FIELD (NM_SETTING_802_1X_IDENTITY), /* 2 */ SETTING_FIELD (NM_SETTING_802_1X_ANONYMOUS_IDENTITY), /* 3 */ SETTING_FIELD (NM_SETTING_802_1X_PAC_FILE), /* 4 */ SETTING_FIELD (NM_SETTING_802_1X_CA_CERT), /* 5 */ SETTING_FIELD (NM_SETTING_802_1X_CA_PATH), /* 6 */ SETTING_FIELD (NM_SETTING_802_1X_SUBJECT_MATCH), /* 7 */ SETTING_FIELD (NM_SETTING_802_1X_ALTSUBJECT_MATCHES), /* 8 */ SETTING_FIELD (NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH), /* 9 */ SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT), /* 10 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER), /* 11 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL), /* 12 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING), /* 13 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH), /* 14 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP), /* 15 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT), /* 16 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH), /* 17 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH), /* 18 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES), /* 19 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH), /* 20 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT), /* 21 */ SETTING_FIELD (NM_SETTING_802_1X_PASSWORD), /* 22 */ SETTING_FIELD (NM_SETTING_802_1X_PASSWORD_FLAGS), /* 23 */ SETTING_FIELD (NM_SETTING_802_1X_PASSWORD_RAW), /* 24 */ SETTING_FIELD (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS), /* 25 */ SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY), /* 26 */ SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD), /* 27 */ SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS), /* 28 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY), /* 29 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD), /* 30 */ SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS), /* 31 */ SETTING_FIELD (NM_SETTING_802_1X_PIN), /* 32 */ SETTING_FIELD (NM_SETTING_802_1X_PIN_FLAGS), /* 33 */ SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS), /* 34 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_802_1X_ALL "name"","\ NM_SETTING_802_1X_EAP","\ NM_SETTING_802_1X_IDENTITY","\ NM_SETTING_802_1X_ANONYMOUS_IDENTITY","\ NM_SETTING_802_1X_PAC_FILE","\ NM_SETTING_802_1X_CA_CERT","\ NM_SETTING_802_1X_CA_PATH","\ NM_SETTING_802_1X_SUBJECT_MATCH","\ NM_SETTING_802_1X_ALTSUBJECT_MATCHES","\ NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH","\ NM_SETTING_802_1X_CLIENT_CERT","\ NM_SETTING_802_1X_PHASE1_PEAPVER","\ NM_SETTING_802_1X_PHASE1_PEAPLABEL","\ NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING","\ NM_SETTING_802_1X_PHASE2_AUTH","\ NM_SETTING_802_1X_PHASE2_AUTHEAP","\ NM_SETTING_802_1X_PHASE2_CA_CERT","\ NM_SETTING_802_1X_PHASE2_CA_PATH","\ NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH","\ NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES","\ NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH","\ NM_SETTING_802_1X_PHASE2_CLIENT_CERT","\ NM_SETTING_802_1X_PASSWORD","\ NM_SETTING_802_1X_PASSWORD_FLAGS","\ NM_SETTING_802_1X_PASSWORD_RAW","\ NM_SETTING_802_1X_PASSWORD_RAW_FLAGS","\ NM_SETTING_802_1X_PRIVATE_KEY","\ NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD","\ NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS","\ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY","\ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD","\ NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS","\ NM_SETTING_802_1X_PIN","\ NM_SETTING_802_1X_PIN_FLAGS","\ NM_SETTING_802_1X_SYSTEM_CA_CERTS /* Available fields for NM_SETTING_WIRELESS_SETTING_NAME */ NmcOutputField nmc_fields_setting_wireless[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_WIRELESS_SSID), /* 1 */ SETTING_FIELD (NM_SETTING_WIRELESS_MODE), /* 2 */ SETTING_FIELD (NM_SETTING_WIRELESS_BAND), /* 3 */ SETTING_FIELD (NM_SETTING_WIRELESS_CHANNEL), /* 4 */ SETTING_FIELD (NM_SETTING_WIRELESS_BSSID), /* 5 */ SETTING_FIELD (NM_SETTING_WIRELESS_RATE), /* 6 */ SETTING_FIELD (NM_SETTING_WIRELESS_TX_POWER), /* 7 */ SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS), /* 8 */ SETTING_FIELD (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS), /* 9 */ SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST), /* 10 */ SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION), /* 11 */ SETTING_FIELD (NM_SETTING_WIRELESS_MTU), /* 12 */ SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS), /* 13 */ SETTING_FIELD (NM_SETTING_WIRELESS_HIDDEN), /* 14 */ SETTING_FIELD (NM_SETTING_WIRELESS_POWERSAVE), /* 15 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_WIRELESS_ALL "name"","\ NM_SETTING_WIRELESS_SSID","\ NM_SETTING_WIRELESS_MODE","\ NM_SETTING_WIRELESS_BAND","\ NM_SETTING_WIRELESS_CHANNEL","\ NM_SETTING_WIRELESS_BSSID","\ NM_SETTING_WIRELESS_RATE","\ NM_SETTING_WIRELESS_TX_POWER","\ NM_SETTING_WIRELESS_MAC_ADDRESS","\ NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS","\ NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST","\ NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION","\ NM_SETTING_WIRELESS_MTU","\ NM_SETTING_WIRELESS_SEEN_BSSIDS","\ NM_SETTING_WIRELESS_HIDDEN"," \ NM_SETTING_WIRELESS_POWERSAVE /* Available fields for NM_SETTING_WIRELESS_SECURITY_SETTING_NAME */ NmcOutputField nmc_fields_setting_wireless_security[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT), /* 1 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX), /* 2 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_AUTH_ALG), /* 3 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PROTO), /* 4 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PAIRWISE), /* 5 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_GROUP), /* 6 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME), /* 7 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0), /* 8 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1), /* 9 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2), /* 10 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3), /* 11 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS), /* 12 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE), /* 13 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PSK), /* 14 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS), /* 15 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD), /* 16 */ SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS), /* 17 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL "name"","\ NM_SETTING_WIRELESS_SECURITY_KEY_MGMT","\ NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX","\ NM_SETTING_WIRELESS_SECURITY_AUTH_ALG","\ NM_SETTING_WIRELESS_SECURITY_PROTO","\ NM_SETTING_WIRELESS_SECURITY_PAIRWISE","\ NM_SETTING_WIRELESS_SECURITY_GROUP","\ NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME","\ NM_SETTING_WIRELESS_SECURITY_WEP_KEY0","\ NM_SETTING_WIRELESS_SECURITY_WEP_KEY1","\ NM_SETTING_WIRELESS_SECURITY_WEP_KEY2","\ NM_SETTING_WIRELESS_SECURITY_WEP_KEY3","\ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS","\ NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE","\ NM_SETTING_WIRELESS_SECURITY_PSK","\ NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS","\ NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD","\ NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS /* Available fields for NM_SETTING_IP4_CONFIG_SETTING_NAME */ NmcOutputField nmc_fields_setting_ip4_config[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_METHOD), /* 1 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS), /* 2 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_SEARCH), /* 3 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_OPTIONS), /* 4 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES), /* 5 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY), /* 6 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES), /* 7 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC), /* 8 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES), /* 9 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS), /* 10 */ SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID), /* 11 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_TIMEOUT), /* 12 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME), /* 13 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME), /* 14 */ SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_FQDN), /* 15 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT), /* 16 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL), /* 17 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DAD_TIMEOUT), /* 18 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_IP4_CONFIG_ALL "name"","\ NM_SETTING_IP_CONFIG_METHOD","\ NM_SETTING_IP_CONFIG_DNS","\ NM_SETTING_IP_CONFIG_DNS_SEARCH","\ NM_SETTING_IP_CONFIG_DNS_OPTIONS","\ NM_SETTING_IP_CONFIG_ADDRESSES","\ NM_SETTING_IP_CONFIG_GATEWAY","\ NM_SETTING_IP_CONFIG_ROUTES","\ NM_SETTING_IP_CONFIG_ROUTE_METRIC","\ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES","\ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS","\ NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID","\ NM_SETTING_IP_CONFIG_DHCP_TIMEOUT","\ NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME","\ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME","\ NM_SETTING_IP4_CONFIG_DHCP_FQDN","\ NM_SETTING_IP_CONFIG_NEVER_DEFAULT","\ NM_SETTING_IP_CONFIG_MAY_FAIL","\ NM_SETTING_IP_CONFIG_DAD_TIMEOUT /* Available fields for NM_SETTING_IP6_CONFIG_SETTING_NAME */ NmcOutputField nmc_fields_setting_ip6_config[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_METHOD), /* 1 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS), /* 2 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_SEARCH), /* 3 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_OPTIONS), /* 4 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES), /* 5 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY), /* 6 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES), /* 7 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC), /* 8 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES), /* 9 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS), /* 10 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT), /* 11 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL), /* 12 */ SETTING_FIELD (NM_SETTING_IP6_CONFIG_IP6_PRIVACY), /* 13 */ SETTING_FIELD (NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE), /* 14 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME), /* 15 */ SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME), /* 16 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_IP6_CONFIG_ALL "name"","\ NM_SETTING_IP_CONFIG_METHOD","\ NM_SETTING_IP_CONFIG_DNS","\ NM_SETTING_IP_CONFIG_DNS_SEARCH","\ NM_SETTING_IP_CONFIG_DNS_OPTIONS","\ NM_SETTING_IP_CONFIG_ADDRESSES","\ NM_SETTING_IP_CONFIG_GATEWAY","\ NM_SETTING_IP_CONFIG_ROUTES","\ NM_SETTING_IP_CONFIG_ROUTE_METRIC","\ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES","\ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS","\ NM_SETTING_IP_CONFIG_NEVER_DEFAULT","\ NM_SETTING_IP_CONFIG_MAY_FAIL","\ NM_SETTING_IP6_CONFIG_IP6_PRIVACY","\ NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE","\ NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME","\ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME /* Available fields for NM_SETTING_SERIAL_SETTING_NAME */ NmcOutputField nmc_fields_setting_serial[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_SERIAL_BAUD), /* 1 */ SETTING_FIELD (NM_SETTING_SERIAL_BITS), /* 2 */ SETTING_FIELD (NM_SETTING_SERIAL_PARITY), /* 3 */ SETTING_FIELD (NM_SETTING_SERIAL_STOPBITS), /* 4 */ SETTING_FIELD (NM_SETTING_SERIAL_SEND_DELAY), /* 5 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_SERIAL_ALL "name"","\ NM_SETTING_SERIAL_BAUD","\ NM_SETTING_SERIAL_BITS","\ NM_SETTING_SERIAL_PARITY","\ NM_SETTING_SERIAL_STOPBITS","\ NM_SETTING_SERIAL_SEND_DELAY /* Available fields for NM_SETTING_PPP_SETTING_NAME */ NmcOutputField nmc_fields_setting_ppp[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_PPP_NOAUTH), /* 1 */ SETTING_FIELD (NM_SETTING_PPP_REFUSE_EAP), /* 2 */ SETTING_FIELD (NM_SETTING_PPP_REFUSE_PAP), /* 3 */ SETTING_FIELD (NM_SETTING_PPP_REFUSE_CHAP), /* 4 */ SETTING_FIELD (NM_SETTING_PPP_REFUSE_MSCHAP), /* 5 */ SETTING_FIELD (NM_SETTING_PPP_REFUSE_MSCHAPV2), /* 6 */ SETTING_FIELD (NM_SETTING_PPP_NOBSDCOMP), /* 7 */ SETTING_FIELD (NM_SETTING_PPP_NODEFLATE), /* 8 */ SETTING_FIELD (NM_SETTING_PPP_NO_VJ_COMP), /* 9 */ SETTING_FIELD (NM_SETTING_PPP_REQUIRE_MPPE), /* 10 */ SETTING_FIELD (NM_SETTING_PPP_REQUIRE_MPPE_128), /* 11 */ SETTING_FIELD (NM_SETTING_PPP_MPPE_STATEFUL), /* 12 */ SETTING_FIELD (NM_SETTING_PPP_CRTSCTS), /* 13 */ SETTING_FIELD (NM_SETTING_PPP_BAUD), /* 14 */ SETTING_FIELD (NM_SETTING_PPP_MRU), /* 15 */ SETTING_FIELD (NM_SETTING_PPP_MTU), /* 16 */ SETTING_FIELD (NM_SETTING_PPP_LCP_ECHO_FAILURE), /* 17 */ SETTING_FIELD (NM_SETTING_PPP_LCP_ECHO_INTERVAL), /* 18 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_PPP_ALL "name"","\ NM_SETTING_PPP_NOAUTH","\ NM_SETTING_PPP_REFUSE_EAP","\ NM_SETTING_PPP_REFUSE_PAP","\ NM_SETTING_PPP_REFUSE_CHAP","\ NM_SETTING_PPP_REFUSE_MSCHAP","\ NM_SETTING_PPP_REFUSE_MSCHAPV2","\ NM_SETTING_PPP_NOBSDCOMP","\ NM_SETTING_PPP_NODEFLATE","\ NM_SETTING_PPP_NO_VJ_COMP","\ NM_SETTING_PPP_REQUIRE_MPPE","\ NM_SETTING_PPP_REQUIRE_MPPE_128","\ NM_SETTING_PPP_MPPE_STATEFUL","\ NM_SETTING_PPP_CRTSCTS","\ NM_SETTING_PPP_BAUD","\ NM_SETTING_PPP_MRU","\ NM_SETTING_PPP_MTU","\ NM_SETTING_PPP_LCP_ECHO_FAILURE","\ NM_SETTING_PPP_LCP_ECHO_INTERVAL /* Available fields for NM_SETTING_PPPOE_SETTING_NAME */ NmcOutputField nmc_fields_setting_pppoe[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_PPPOE_SERVICE), /* 1 */ SETTING_FIELD (NM_SETTING_PPPOE_USERNAME), /* 2 */ SETTING_FIELD (NM_SETTING_PPPOE_PASSWORD), /* 3 */ SETTING_FIELD (NM_SETTING_PPPOE_PASSWORD_FLAGS), /* 4 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_PPPOE_ALL "name"","\ NM_SETTING_PPPOE_SERVICE","\ NM_SETTING_PPPOE_USERNAME","\ NM_SETTING_PPPOE_PASSWORD","\ NM_SETTING_PPPOE_PASSWORD_FLAGS /* Available fields for NM_SETTING_ADSL_SETTING_NAME */ NmcOutputField nmc_fields_setting_adsl[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_ADSL_USERNAME), /* 1 */ SETTING_FIELD (NM_SETTING_ADSL_PASSWORD), /* 2 */ SETTING_FIELD (NM_SETTING_ADSL_PASSWORD_FLAGS), /* 3 */ SETTING_FIELD (NM_SETTING_ADSL_PROTOCOL), /* 4 */ SETTING_FIELD (NM_SETTING_ADSL_ENCAPSULATION), /* 5 */ SETTING_FIELD (NM_SETTING_ADSL_VPI), /* 6 */ SETTING_FIELD (NM_SETTING_ADSL_VCI), /* 7 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_ADSL_ALL "name"","\ NM_SETTING_ADSL_USERNAME","\ NM_SETTING_ADSL_PASSWORD","\ NM_SETTING_ADSL_PASSWORD_FLAGS","\ NM_SETTING_ADSL_PROTOCOL","\ NM_SETTING_ADSL_ENCAPSULATION","\ NM_SETTING_ADSL_VPI","\ NM_SETTING_ADSL_VCI /* Available fields for NM_SETTING_GSM_SETTING_NAME */ NmcOutputField nmc_fields_setting_gsm[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_GSM_NUMBER), /* 1 */ SETTING_FIELD (NM_SETTING_GSM_USERNAME), /* 2 */ SETTING_FIELD (NM_SETTING_GSM_PASSWORD), /* 3 */ SETTING_FIELD (NM_SETTING_GSM_PASSWORD_FLAGS), /* 4 */ SETTING_FIELD (NM_SETTING_GSM_APN), /* 5 */ SETTING_FIELD (NM_SETTING_GSM_NETWORK_ID), /* 6 */ SETTING_FIELD (NM_SETTING_GSM_PIN), /* 7 */ SETTING_FIELD (NM_SETTING_GSM_PIN_FLAGS), /* 8 */ SETTING_FIELD (NM_SETTING_GSM_HOME_ONLY), /* 9 */ SETTING_FIELD (NM_SETTING_GSM_DEVICE_ID), /* 10 */ SETTING_FIELD (NM_SETTING_GSM_SIM_ID), /* 11 */ SETTING_FIELD (NM_SETTING_GSM_SIM_OPERATOR_ID), /* 12 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_GSM_ALL "name"","\ NM_SETTING_GSM_NUMBER","\ NM_SETTING_GSM_USERNAME","\ NM_SETTING_GSM_PASSWORD","\ NM_SETTING_GSM_PASSWORD_FLAGS","\ NM_SETTING_GSM_APN","\ NM_SETTING_GSM_NETWORK_ID","\ NM_SETTING_GSM_PIN","\ NM_SETTING_GSM_PIN_FLAGS","\ NM_SETTING_GSM_HOME_ONLY","\ NM_SETTING_GSM_DEVICE_ID","\ NM_SETTING_GSM_SIM_ID","\ NM_SETTING_GSM_SIM_OPERATOR_ID /* Available fields for NM_SETTING_CDMA_SETTING_NAME */ NmcOutputField nmc_fields_setting_cdma[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_CDMA_NUMBER), /* 1 */ SETTING_FIELD (NM_SETTING_CDMA_USERNAME), /* 2 */ SETTING_FIELD (NM_SETTING_CDMA_PASSWORD), /* 3 */ SETTING_FIELD (NM_SETTING_CDMA_PASSWORD_FLAGS), /* 4 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_CDMA_ALL "name"","\ NM_SETTING_CDMA_NUMBER","\ NM_SETTING_CDMA_USERNAME","\ NM_SETTING_CDMA_PASSWORD","\ NM_SETTING_CDMA_PASSWORD_FLAGS /* Available fields for NM_SETTING_BLUETOOTH_SETTING_NAME */ NmcOutputField nmc_fields_setting_bluetooth[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_BLUETOOTH_BDADDR), /* 1 */ SETTING_FIELD (NM_SETTING_BLUETOOTH_TYPE), /* 2 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_BLUETOOTH_ALL "name"","\ NM_SETTING_BLUETOOTH_BDADDR","\ NM_SETTING_BLUETOOTH_TYPE /* Available fields for NM_SETTING_OLPC_MESH_SETTING_NAME */ NmcOutputField nmc_fields_setting_olpc_mesh[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_OLPC_MESH_SSID), /* 1 */ SETTING_FIELD (NM_SETTING_OLPC_MESH_CHANNEL), /* 2 */ SETTING_FIELD (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS), /* 3 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_OLPC_MESH_ALL "name"","\ NM_SETTING_OLPC_MESH_SSID","\ NM_SETTING_OLPC_MESH_CHANNEL","\ NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS /* Available fields for NM_SETTING_VPN_SETTING_NAME */ NmcOutputField nmc_fields_setting_vpn[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_VPN_SERVICE_TYPE), /* 1 */ SETTING_FIELD (NM_SETTING_VPN_USER_NAME), /* 2 */ SETTING_FIELD (NM_SETTING_VPN_DATA), /* 3 */ SETTING_FIELD (NM_SETTING_VPN_SECRETS), /* 4 */ SETTING_FIELD (NM_SETTING_VPN_PERSISTENT), /* 5 */ SETTING_FIELD (NM_SETTING_VPN_TIMEOUT), /* 6 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_VPN_ALL "name"","\ NM_SETTING_VPN_SERVICE_TYPE","\ NM_SETTING_VPN_USER_NAME","\ NM_SETTING_VPN_DATA","\ NM_SETTING_VPN_SECRETS","\ NM_SETTING_VPN_PERSISTENT","\ NM_SETTING_VPN_TIMEOUT /* Available fields for NM_SETTING_WIMAX_SETTING_NAME */ NmcOutputField nmc_fields_setting_wimax[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_WIMAX_MAC_ADDRESS), /* 1 */ SETTING_FIELD (NM_SETTING_WIMAX_NETWORK_NAME), /* 2 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_WIMAX_ALL "name"","\ NM_SETTING_WIMAX_MAC_ADDRESS","\ NM_SETTING_WIMAX_NETWORK_NAME /* Available fields for NM_SETTING_INFINIBAND_SETTING_NAME */ NmcOutputField nmc_fields_setting_infiniband[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_INFINIBAND_MAC_ADDRESS), /* 1 */ SETTING_FIELD (NM_SETTING_INFINIBAND_MTU), /* 2 */ SETTING_FIELD (NM_SETTING_INFINIBAND_TRANSPORT_MODE), /* 3 */ SETTING_FIELD (NM_SETTING_INFINIBAND_P_KEY), /* 4 */ SETTING_FIELD (NM_SETTING_INFINIBAND_PARENT), /* 5 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_INFINIBAND_ALL "name"","\ NM_SETTING_INFINIBAND_MAC_ADDRESS","\ NM_SETTING_INFINIBAND_MTU"," \ NM_SETTING_INFINIBAND_TRANSPORT_MODE"," \ NM_SETTING_INFINIBAND_P_KEY"," \ NM_SETTING_INFINIBAND_PARENT /* Available fields for NM_SETTING_BOND_SETTING_NAME */ NmcOutputField nmc_fields_setting_bond[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_BOND_OPTIONS), /* 1 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_BOND_ALL "name"","\ NM_SETTING_BOND_OPTIONS /* Available fields for NM_SETTING_VLAN_SETTING_NAME */ NmcOutputField nmc_fields_setting_vlan[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_VLAN_PARENT), /* 1 */ SETTING_FIELD (NM_SETTING_VLAN_ID), /* 2 */ SETTING_FIELD (NM_SETTING_VLAN_FLAGS), /* 3 */ SETTING_FIELD (NM_SETTING_VLAN_INGRESS_PRIORITY_MAP), /* 4 */ SETTING_FIELD (NM_SETTING_VLAN_EGRESS_PRIORITY_MAP), /* 5 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_VLAN_ALL "name"","\ NM_SETTING_VLAN_PARENT","\ NM_SETTING_VLAN_ID","\ NM_SETTING_VLAN_FLAGS","\ NM_SETTING_VLAN_INGRESS_PRIORITY_MAP","\ NM_SETTING_VLAN_EGRESS_PRIORITY_MAP /* Available fields for NM_SETTING_BRIDGE_SETTING_NAME */ NmcOutputField nmc_fields_setting_bridge[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_BRIDGE_MAC_ADDRESS), /* 1 */ SETTING_FIELD (NM_SETTING_BRIDGE_STP), /* 2 */ SETTING_FIELD (NM_SETTING_BRIDGE_PRIORITY), /* 3 */ SETTING_FIELD (NM_SETTING_BRIDGE_FORWARD_DELAY), /* 4 */ SETTING_FIELD (NM_SETTING_BRIDGE_HELLO_TIME), /* 5 */ SETTING_FIELD (NM_SETTING_BRIDGE_MAX_AGE), /* 6 */ SETTING_FIELD (NM_SETTING_BRIDGE_AGEING_TIME), /* 7 */ SETTING_FIELD (NM_SETTING_BRIDGE_MULTICAST_SNOOPING), /* 8 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_BRIDGE_ALL "name"","\ NM_SETTING_BRIDGE_MAC_ADDRESS","\ NM_SETTING_BRIDGE_STP","\ NM_SETTING_BRIDGE_PRIORITY","\ NM_SETTING_BRIDGE_FORWARD_DELAY","\ NM_SETTING_BRIDGE_HELLO_TIME","\ NM_SETTING_BRIDGE_MAX_AGE","\ NM_SETTING_BRIDGE_AGEING_TIME","\ NM_SETTING_BRIDGE_MULTICAST_SNOOPING /* Available fields for NM_SETTING_BRIDGE_PORT_SETTING_NAME */ NmcOutputField nmc_fields_setting_bridge_port[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_BRIDGE_PORT_PRIORITY), /* 1 */ SETTING_FIELD (NM_SETTING_BRIDGE_PORT_PATH_COST), /* 2 */ SETTING_FIELD (NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE), /* 3 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_BRIDGE_PORT_ALL "name"","\ NM_SETTING_BRIDGE_PORT_PRIORITY","\ NM_SETTING_BRIDGE_PORT_PATH_COST","\ NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE /* Available fields for NM_SETTING_TEAM_SETTING_NAME */ NmcOutputField nmc_fields_setting_team[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_TEAM_CONFIG), /* 1 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_TEAM_ALL "name"","\ NM_SETTING_TEAM_CONFIG /* Available fields for NM_SETTING_TEAM_PORT_SETTING_NAME */ NmcOutputField nmc_fields_setting_team_port[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_TEAM_PORT_CONFIG), /* 1 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_TEAM_PORT_ALL "name"","\ NM_SETTING_TEAM_PORT_CONFIG /* Available fields for NM_SETTING_DCB_SETTING_NAME */ NmcOutputField nmc_fields_setting_dcb[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_DCB_APP_FCOE_FLAGS), /* 1 */ SETTING_FIELD (NM_SETTING_DCB_APP_FCOE_PRIORITY), /* 2 */ SETTING_FIELD (NM_SETTING_DCB_APP_FCOE_MODE), /* 3 */ SETTING_FIELD (NM_SETTING_DCB_APP_ISCSI_FLAGS), /* 4 */ SETTING_FIELD (NM_SETTING_DCB_APP_ISCSI_PRIORITY), /* 5 */ SETTING_FIELD (NM_SETTING_DCB_APP_FIP_FLAGS), /* 6 */ SETTING_FIELD (NM_SETTING_DCB_APP_FIP_PRIORITY), /* 7 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS), /* 8 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL), /* 9 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS), /* 10 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_GROUP_ID), /* 11 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH), /* 12 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_BANDWIDTH), /* 13 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH), /* 14 */ SETTING_FIELD (NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS), /* 15 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_DCB_ALL "name"","\ NM_SETTING_DCB_APP_FCOE_FLAGS","\ NM_SETTING_DCB_APP_FCOE_PRIORITY","\ NM_SETTING_DCB_APP_FCOE_MODE","\ NM_SETTING_DCB_APP_ISCSI_FLAGS","\ NM_SETTING_DCB_APP_ISCSI_PRIORITY","\ NM_SETTING_DCB_APP_FIP_FLAGS","\ NM_SETTING_DCB_APP_FIP_PRIORITY","\ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS","\ NM_SETTING_DCB_PRIORITY_FLOW_CONTROL","\ NM_SETTING_DCB_PRIORITY_GROUP_FLAGS","\ NM_SETTING_DCB_PRIORITY_GROUP_ID","\ NM_SETTING_DCB_PRIORITY_GROUP_BANDWIDTH","\ NM_SETTING_DCB_PRIORITY_BANDWIDTH","\ NM_SETTING_DCB_PRIORITY_STRICT_BANDWIDTH","\ NM_SETTING_DCB_PRIORITY_TRAFFIC_CLASS /* Available fields for NM_SETTING_TUN_SETTING_NAME */ NmcOutputField nmc_fields_setting_tun[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_TUN_MODE), /* 1 */ SETTING_FIELD (NM_SETTING_TUN_OWNER), /* 2 */ SETTING_FIELD (NM_SETTING_TUN_GROUP), /* 3 */ SETTING_FIELD (NM_SETTING_TUN_PI), /* 4 */ SETTING_FIELD (NM_SETTING_TUN_VNET_HDR), /* 5 */ SETTING_FIELD (NM_SETTING_TUN_MULTI_QUEUE), /* 6 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_TUN_ALL "name"","\ NM_SETTING_TUN_MODE","\ NM_SETTING_TUN_OWNER","\ NM_SETTING_TUN_GROUP","\ NM_SETTING_TUN_PI","\ NM_SETTING_TUN_VNET_HDR","\ NM_SETTING_TUN_MULTI_QUEUE /* Available fields for NM_SETTING_IP_TUNNEL_SETTING_NAME */ NmcOutputField nmc_fields_setting_ip_tunnel[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_MODE), /* 1 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_PARENT), /* 2 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_LOCAL), /* 3 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_REMOTE), /* 4 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_TTL), /* 5 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_TOS), /* 6 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY), /* 7 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_INPUT_KEY), /* 8 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_OUTPUT_KEY), /* 9 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT), /* 10 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_FLOW_LABEL), /* 11 */ SETTING_FIELD (NM_SETTING_IP_TUNNEL_MTU), /* 12 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_IP_TUNNEL_ALL "name"","\ NM_SETTING_IP_TUNNEL_MODE","\ NM_SETTING_IP_TUNNEL_PARENT","\ NM_SETTING_IP_TUNNEL_LOCAL","\ NM_SETTING_IP_TUNNEL_REMOTE","\ NM_SETTING_IP_TUNNEL_TTL","\ NM_SETTING_IP_TUNNEL_TOS","\ NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY","\ NM_SETTING_IP_TUNNEL_INPUT_KEY","\ NM_SETTING_IP_TUNNEL_OUTPUT_KEY","\ NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT","\ NM_SETTING_IP_TUNNEL_FLOW_LABEL","\ NM_SETTING_IP_TUNNEL_MTU /* Available fields for NM_SETTING_MACVLAN_SETTING_NAME */ NmcOutputField nmc_fields_setting_macvlan[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_MACVLAN_PARENT), /* 1 */ SETTING_FIELD (NM_SETTING_MACVLAN_MODE), /* 2 */ SETTING_FIELD (NM_SETTING_MACVLAN_PROMISCUOUS), /* 3 */ SETTING_FIELD (NM_SETTING_MACVLAN_TAP), /* 4 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_MACVLAN_ALL "name"","\ NM_SETTING_MACVLAN_PARENT","\ NM_SETTING_MACVLAN_MODE","\ NM_SETTING_MACVLAN_PROMISCUOUS","\ NM_SETTING_MACVLAN_TAP /* Available fields for NM_SETTING_VXLAN_SETTING_NAME */ NmcOutputField nmc_fields_setting_vxlan[] = { SETTING_FIELD ("name"), /* 0 */ SETTING_FIELD (NM_SETTING_VXLAN_PARENT), /* 1 */ SETTING_FIELD (NM_SETTING_VXLAN_ID), /* 2 */ SETTING_FIELD (NM_SETTING_VXLAN_LOCAL), /* 3 */ SETTING_FIELD (NM_SETTING_VXLAN_REMOTE), /* 4 */ SETTING_FIELD (NM_SETTING_VXLAN_SOURCE_PORT_MIN), /* 5 */ SETTING_FIELD (NM_SETTING_VXLAN_SOURCE_PORT_MAX), /* 6 */ SETTING_FIELD (NM_SETTING_VXLAN_DESTINATION_PORT), /* 7 */ SETTING_FIELD (NM_SETTING_VXLAN_TOS), /* 8 */ SETTING_FIELD (NM_SETTING_VXLAN_TTL), /* 9 */ SETTING_FIELD (NM_SETTING_VXLAN_AGEING), /* 10 */ SETTING_FIELD (NM_SETTING_VXLAN_LIMIT), /* 11 */ SETTING_FIELD (NM_SETTING_VXLAN_LEARNING), /* 12 */ SETTING_FIELD (NM_SETTING_VXLAN_PROXY), /* 13 */ SETTING_FIELD (NM_SETTING_VXLAN_RSC), /* 14 */ SETTING_FIELD (NM_SETTING_VXLAN_L2_MISS), /* 15 */ SETTING_FIELD (NM_SETTING_VXLAN_L3_MISS), /* 16 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_VXLAN_ALL "name"","\ NM_SETTING_VXLAN_PARENT","\ NM_SETTING_VXLAN_ID","\ NM_SETTING_VXLAN_LOCAL","\ NM_SETTING_VXLAN_REMOTE","\ NM_SETTING_VXLAN_SOURCE_PORT_MIN","\ NM_SETTING_VXLAN_SOURCE_PORT_MAX","\ NM_SETTING_VXLAN_DESTINATION_PORT","\ NM_SETTING_VXLAN_TOS","\ NM_SETTING_VXLAN_TTL","\ NM_SETTING_VXLAN_AGEING","\ NM_SETTING_VXLAN_LIMIT","\ NM_SETTING_VXLAN_LEARNING","\ NM_SETTING_VXLAN_PROXY","\ NM_SETTING_VXLAN_RSC","\ NM_SETTING_VXLAN_L2_MISS","\ NM_SETTING_VXLAN_L3_MISS /*----------------------------------------------------------------------------*/ static char * wep_key_type_to_string (NMWepKeyType type) { switch (type) { case NM_WEP_KEY_TYPE_KEY: return g_strdup_printf (_("%d (key)"), type); case NM_WEP_KEY_TYPE_PASSPHRASE: return g_strdup_printf (_("%d (passphrase)"), type); case NM_WEP_KEY_TYPE_UNKNOWN: default: return g_strdup_printf (_("%d (unknown)"), type); } } static char * bytes_to_string (GBytes *bytes) { const guint8 *data; gsize len; GString *cert = NULL; int i; if (!bytes) return NULL; data = g_bytes_get_data (bytes, &len); cert = g_string_new (NULL); for (i = 0; i < len; i++) g_string_append_printf (cert, "%02X", data[i]); return g_string_free (cert, FALSE); } static char * vlan_flags_to_string (guint32 flags) { GString *flag_str; if (flags == 0) return g_strdup (_("0 (NONE)")); flag_str = g_string_new (NULL); g_string_printf (flag_str, "%d (", flags); if (flags & NM_VLAN_FLAG_REORDER_HEADERS) g_string_append (flag_str, _("REORDER_HEADERS, ")); if (flags & NM_VLAN_FLAG_GVRP) g_string_append (flag_str, _("GVRP, ")); if (flags & NM_VLAN_FLAG_LOOSE_BINDING) g_string_append (flag_str, _("LOOSE_BINDING, ")); if (flags & NM_VLAN_FLAG_MVRP) g_string_append (flag_str, _("MVRP, ")); if (flag_str->str[flag_str->len-1] == '(') g_string_append (flag_str, _("unknown")); else g_string_truncate (flag_str, flag_str->len-2); /* chop off trailing ', ' */ g_string_append_c (flag_str, ')'); return g_string_free (flag_str, FALSE); } static char * vlan_priorities_to_string (NMSettingVlan *s_vlan, NMVlanPriorityMap map) { GString *priorities; int i; priorities = g_string_new (NULL); for (i = 0; i < nm_setting_vlan_get_num_priorities (s_vlan, map); i++) { guint32 from, to; if (nm_setting_vlan_get_priority (s_vlan, map, i, &from, &to)) g_string_append_printf (priorities, "%d:%d,", from, to); } if (priorities->len) g_string_truncate (priorities, priorities->len-1); /* chop off trailing ',' */ return g_string_free (priorities, FALSE); } static char * ip6_privacy_to_string (NMSettingIP6ConfigPrivacy ip6_privacy, NmcPropertyGetType get_type) { if (get_type == NMC_PROPERTY_GET_PARSABLE) return g_strdup_printf ("%d", ip6_privacy); switch (ip6_privacy) { case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED: return g_strdup_printf (_("%d (disabled)"), ip6_privacy); case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR: return g_strdup_printf (_("%d (enabled, prefer public IP)"), ip6_privacy); case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR: return g_strdup_printf (_("%d (enabled, prefer temporary IP)"), ip6_privacy); default: return g_strdup_printf (_("%d (unknown)"), ip6_privacy); } } static char * autoconnect_slaves_to_string (NMSettingConnectionAutoconnectSlaves autoconnect_slaves, NmcPropertyGetType get_type) { if (get_type == NMC_PROPERTY_GET_PARSABLE) return g_strdup_printf ("%d", autoconnect_slaves); switch (autoconnect_slaves) { case NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_NO: return g_strdup_printf (_("%d (no)"), autoconnect_slaves); case NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_YES: return g_strdup_printf (_("%d (yes)"), autoconnect_slaves); case NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_DEFAULT: default: return g_strdup_printf (_("%d (default)"), autoconnect_slaves); } } static char * secret_flags_to_string (guint32 flags, NmcPropertyGetType get_type) { GString *flag_str; if (get_type == NMC_PROPERTY_GET_PARSABLE) return g_strdup_printf ("%u", flags); if (flags == 0) return g_strdup (_("0 (none)")); flag_str = g_string_new (NULL); g_string_printf (flag_str, "%u (", flags); if (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED) g_string_append (flag_str, _("agent-owned, ")); if (flags & NM_SETTING_SECRET_FLAG_NOT_SAVED) g_string_append (flag_str, _("not saved, ")); if (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED) g_string_append (flag_str, _("not required, ")); if (flag_str->str[flag_str->len-1] == '(') g_string_append (flag_str, _("unknown")); else g_string_truncate (flag_str, flag_str->len-2); /* chop off trailing ', ' */ g_string_append_c (flag_str, ')'); return g_string_free (flag_str, FALSE); } static void vpn_data_item (const char *key, const char *value, gpointer user_data) { GString *ret_str = (GString *) user_data; if (ret_str->len != 0) g_string_append (ret_str, ", "); g_string_append_printf (ret_str, "%s = %s", key, value); } /* === property get functions === */ #define DEFINE_GETTER(func_name, property_name) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ char *s; \ GValue val = G_VALUE_INIT; \ g_value_init (&val, G_TYPE_STRING); \ g_object_get_property (G_OBJECT (setting), property_name, &val); \ s = g_value_dup_string (&val); \ g_value_unset (&val); \ return s; \ } #define DEFINE_GETTER_WITH_DEFAULT(func_name, property_name, check_is_default) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ const char *s; \ char *s_full; \ GValue val = G_VALUE_INIT; \ \ if ((check_is_default)) { \ if (get_type == NMC_PROPERTY_GET_PARSABLE) \ return g_strdup (""); \ return g_strdup (_("(default)")); \ } \ \ g_value_init (&val, G_TYPE_STRING); \ g_object_get_property (G_OBJECT (setting), property_name, &val); \ s = g_value_get_string (&val); \ if (get_type == NMC_PROPERTY_GET_PARSABLE) \ s_full = g_strdup (s && *s ? s : " "); \ else \ s_full = s ? g_strdup_printf ("\"%s\"", s) : g_strdup (""); \ g_value_unset (&val); \ return s_full; \ } #define DEFINE_SECRET_FLAGS_GETTER(func_name, property_name) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ guint v; \ GValue val = G_VALUE_INIT; \ g_value_init (&val, G_TYPE_UINT); \ g_object_get_property (G_OBJECT (setting), property_name, &val); \ v = g_value_get_uint (&val); \ g_value_unset (&val); \ return secret_flags_to_string (v, get_type); \ } /* --- NM_SETTING_802_1X_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_802_1X_get_eap, NM_SETTING_802_1X_EAP) DEFINE_GETTER (nmc_property_802_1X_get_identity, NM_SETTING_802_1X_IDENTITY) DEFINE_GETTER (nmc_property_802_1X_get_anonymous_identity, NM_SETTING_802_1X_ANONYMOUS_IDENTITY) DEFINE_GETTER (nmc_property_802_1X_get_pac_file, NM_SETTING_802_1X_PAC_FILE) DEFINE_GETTER (nmc_property_802_1X_get_ca_path, NM_SETTING_802_1X_CA_PATH) DEFINE_GETTER (nmc_property_802_1X_get_subject_match, NM_SETTING_802_1X_SUBJECT_MATCH) DEFINE_GETTER (nmc_property_802_1X_get_altsubject_matches, NM_SETTING_802_1X_ALTSUBJECT_MATCHES) DEFINE_GETTER (nmc_property_802_1X_get_domain_suffix_match, NM_SETTING_802_1X_DOMAIN_SUFFIX_MATCH) DEFINE_GETTER (nmc_property_802_1X_get_phase1_peapver, NM_SETTING_802_1X_PHASE1_PEAPVER) DEFINE_GETTER (nmc_property_802_1X_get_phase1_peaplabel, NM_SETTING_802_1X_PHASE1_PEAPLABEL) DEFINE_GETTER (nmc_property_802_1X_get_phase1_fast_provisioning, NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING) DEFINE_GETTER (nmc_property_802_1X_get_phase2_auth, NM_SETTING_802_1X_PHASE2_AUTH) DEFINE_GETTER (nmc_property_802_1X_get_phase2_autheap, NM_SETTING_802_1X_PHASE2_AUTHEAP) DEFINE_GETTER (nmc_property_802_1X_get_phase2_ca_path, NM_SETTING_802_1X_PHASE2_CA_PATH) DEFINE_GETTER (nmc_property_802_1X_get_phase2_subject_match, NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH) DEFINE_GETTER (nmc_property_802_1X_get_phase2_altsubject_matches, NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES) DEFINE_GETTER (nmc_property_802_1X_get_phase2_domain_suffix_match, NM_SETTING_802_1X_PHASE2_DOMAIN_SUFFIX_MATCH) DEFINE_GETTER (nmc_property_802_1X_get_password, NM_SETTING_802_1X_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_password_flags, NM_SETTING_802_1X_PASSWORD_FLAGS) DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_password_raw_flags, NM_SETTING_802_1X_PASSWORD_RAW_FLAGS) DEFINE_GETTER (nmc_property_802_1X_get_private_key_password, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_private_key_password_flags, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS) DEFINE_GETTER (nmc_property_802_1X_get_phase2_private_key_password, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_phase2_private_key_password_flags, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS) DEFINE_GETTER (nmc_property_802_1X_get_pin, NM_SETTING_802_1X_PIN) DEFINE_SECRET_FLAGS_GETTER (nmc_property_802_1X_get_pin_flags, NM_SETTING_802_1X_PIN_FLAGS) DEFINE_GETTER (nmc_property_802_1X_get_system_ca_certs, NM_SETTING_802_1X_SYSTEM_CA_CERTS) static char * nmc_property_802_1X_get_ca_cert (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); NMSetting8021xCKScheme scheme; char *ca_cert_str = NULL; scheme = nm_setting_802_1x_get_ca_cert_scheme (s_8021X); if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) ca_cert_str = bytes_to_string (nm_setting_802_1x_get_ca_cert_blob (s_8021X)); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) ca_cert_str = g_strdup (nm_setting_802_1x_get_ca_cert_path (s_8021X)); return ca_cert_str; } static char * nmc_property_802_1X_get_client_cert (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); NMSetting8021xCKScheme scheme; char *client_cert_str = NULL; scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021X); if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) client_cert_str = bytes_to_string (nm_setting_802_1x_get_client_cert_blob (s_8021X)); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) client_cert_str = g_strdup (nm_setting_802_1x_get_client_cert_path (s_8021X)); return client_cert_str; } static char * nmc_property_802_1X_get_phase2_ca_cert (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); NMSetting8021xCKScheme scheme; char *phase2_ca_cert_str = NULL; scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (s_8021X); if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) phase2_ca_cert_str = bytes_to_string (nm_setting_802_1x_get_phase2_ca_cert_blob (s_8021X)); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) phase2_ca_cert_str = g_strdup (nm_setting_802_1x_get_phase2_ca_cert_path (s_8021X)); return phase2_ca_cert_str; } static char * nmc_property_802_1X_get_phase2_client_cert (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); NMSetting8021xCKScheme scheme; char *phase2_client_cert_str = NULL; scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021X); if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) phase2_client_cert_str = bytes_to_string (nm_setting_802_1x_get_phase2_client_cert_blob (s_8021X)); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) phase2_client_cert_str = g_strdup (nm_setting_802_1x_get_phase2_client_cert_path (s_8021X)); return phase2_client_cert_str; } static char * nmc_property_802_1X_get_password_raw (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); return bytes_to_string (nm_setting_802_1x_get_password_raw (s_8021X)); } static char * nmc_property_802_1X_get_private_key (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); NMSetting8021xCKScheme scheme; char *private_key_str = NULL; scheme = nm_setting_802_1x_get_private_key_scheme (s_8021X); if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) private_key_str = bytes_to_string (nm_setting_802_1x_get_private_key_blob (s_8021X)); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) private_key_str = g_strdup (nm_setting_802_1x_get_private_key_path (s_8021X)); return private_key_str; } static char * nmc_property_802_1X_get_phase2_private_key (NMSetting *setting, NmcPropertyGetType get_type) { NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting); NMSetting8021xCKScheme scheme; char *phase2_private_key_str = NULL; scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021X); if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) phase2_private_key_str = bytes_to_string (nm_setting_802_1x_get_phase2_private_key_blob (s_8021X)); if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) phase2_private_key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X)); return phase2_private_key_str; } /* --- NM_SETTING_ADSL_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_adsl_get_username, NM_SETTING_ADSL_USERNAME) DEFINE_GETTER (nmc_property_adsl_get_password, NM_SETTING_ADSL_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_adsl_get_password_flags, NM_SETTING_ADSL_PASSWORD_FLAGS) DEFINE_GETTER (nmc_property_adsl_get_protocol, NM_SETTING_ADSL_PROTOCOL) DEFINE_GETTER (nmc_property_adsl_get_encapsulation, NM_SETTING_ADSL_ENCAPSULATION) DEFINE_GETTER (nmc_property_adsl_get_vpi, NM_SETTING_ADSL_VPI) DEFINE_GETTER (nmc_property_adsl_get_vci, NM_SETTING_ADSL_VCI) /* --- NM_SETTING_BLUETOOTH_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_bluetooth_get_bdaddr, NM_SETTING_BLUETOOTH_BDADDR) DEFINE_GETTER (nmc_property_bluetooth_get_type, NM_SETTING_BLUETOOTH_TYPE) static char * nmc_property_bond_get_options (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingBond *s_bond = NM_SETTING_BOND (setting); GString *bond_options_s; int i; bond_options_s = g_string_new (NULL); for (i = 0; i < nm_setting_bond_get_num_options (s_bond); i++) { const char *key, *value; gs_free char *tmp_value = NULL; char *p; nm_setting_bond_get_option (s_bond, i, &key, &value); if (nm_streq0 (key, NM_SETTING_BOND_OPTION_ARP_IP_TARGET)) { value = tmp_value = g_strdup (value); for (p = tmp_value; p && *p; p++) { if (*p == ',') *p = ' '; } } g_string_append_printf (bond_options_s, "%s=%s,", key, value); } g_string_truncate (bond_options_s, bond_options_s->len-1); /* chop off trailing ',' */ return g_string_free (bond_options_s, FALSE); } /* --- NM_SETTING_BRIDGE_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_bridge_get_mac_address, NM_SETTING_BRIDGE_MAC_ADDRESS) DEFINE_GETTER (nmc_property_bridge_get_stp, NM_SETTING_BRIDGE_STP) DEFINE_GETTER (nmc_property_bridge_get_priority, NM_SETTING_BRIDGE_PRIORITY) DEFINE_GETTER (nmc_property_bridge_get_forward_delay, NM_SETTING_BRIDGE_FORWARD_DELAY) DEFINE_GETTER (nmc_property_bridge_get_hello_time, NM_SETTING_BRIDGE_HELLO_TIME) DEFINE_GETTER (nmc_property_bridge_get_max_age, NM_SETTING_BRIDGE_MAX_AGE) DEFINE_GETTER (nmc_property_bridge_get_ageing_time, NM_SETTING_BRIDGE_AGEING_TIME) DEFINE_GETTER (nmc_property_bridge_get_multicast_snooping, NM_SETTING_BRIDGE_MULTICAST_SNOOPING) /* --- NM_SETTING_BRIDGE_PORT_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_bridge_port_get_priority, NM_SETTING_BRIDGE_PORT_PRIORITY) DEFINE_GETTER (nmc_property_bridge_port_get_path_cost, NM_SETTING_BRIDGE_PORT_PATH_COST) DEFINE_GETTER (nmc_property_bridge_port_get_hairpin_mode, NM_SETTING_BRIDGE_PORT_HAIRPIN_MODE) /* --- NM_SETTING_TEAM_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_team_get_config, NM_SETTING_TEAM_CONFIG) /* --- NM_SETTING_TEAM_PORT_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_team_port_get_config, NM_SETTING_TEAM_PORT_CONFIG) /* --- NM_SETTING_CDMA_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_cdma_get_number, NM_SETTING_CDMA_NUMBER) DEFINE_GETTER (nmc_property_cdma_get_username, NM_SETTING_CDMA_USERNAME) DEFINE_GETTER (nmc_property_cdma_get_password, NM_SETTING_CDMA_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_cdma_get_password_flags, NM_SETTING_CDMA_PASSWORD_FLAGS) /* --- NM_SETTING_CONNECTION_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_connection_get_id, NM_SETTING_CONNECTION_ID) DEFINE_GETTER (nmc_property_connection_get_uuid, NM_SETTING_CONNECTION_UUID) DEFINE_GETTER (nmc_property_connection_get_interface_name, NM_SETTING_CONNECTION_INTERFACE_NAME) DEFINE_GETTER (nmc_property_connection_get_type, NM_SETTING_CONNECTION_TYPE) DEFINE_GETTER (nmc_property_connection_get_autoconnect, NM_SETTING_CONNECTION_AUTOCONNECT) DEFINE_GETTER (nmc_property_connection_get_autoconnect_priority, NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY) DEFINE_GETTER (nmc_property_connection_get_timestamp, NM_SETTING_CONNECTION_TIMESTAMP) DEFINE_GETTER (nmc_property_connection_get_read_only, NM_SETTING_CONNECTION_READ_ONLY) static char * nmc_property_connection_get_permissions (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingConnection *s_con = NM_SETTING_CONNECTION (setting); GString *perm = NULL; const char *perm_item; const char *perm_type; int i; perm = g_string_new (NULL); for (i = 0; i < nm_setting_connection_get_num_permissions (s_con); i++) { if (nm_setting_connection_get_permission (s_con, i, &perm_type, &perm_item, NULL)) g_string_append_printf (perm, "%s:%s,", perm_type, perm_item); } if (perm->len > 0) g_string_truncate (perm, perm->len-1); /* remove trailing , */ return g_string_free (perm, FALSE); } DEFINE_GETTER (nmc_property_connection_get_zone, NM_SETTING_CONNECTION_ZONE) DEFINE_GETTER (nmc_property_connection_get_master, NM_SETTING_CONNECTION_MASTER) DEFINE_GETTER (nmc_property_connection_get_slave_type, NM_SETTING_CONNECTION_SLAVE_TYPE) static char * nmc_property_connection_get_autoconnect_slaves (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingConnection *s_con = NM_SETTING_CONNECTION (setting); return autoconnect_slaves_to_string (nm_setting_connection_get_autoconnect_slaves (s_con), get_type); } DEFINE_GETTER (nmc_property_connection_get_secondaries, NM_SETTING_CONNECTION_SECONDARIES) DEFINE_GETTER (nmc_property_connection_get_gateway_ping_timeout, NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT) /* --- NM_SETTING_DCB_SETTING_NAME property get functions --- */ static char * dcb_flags_to_string (NMSettingDcbFlags flags) { GString *flag_str; if (flags == 0) return g_strdup (_("0 (disabled)")); flag_str = g_string_new (NULL); g_string_printf (flag_str, "%d (", flags); if (flags & NM_SETTING_DCB_FLAG_ENABLE) g_string_append (flag_str, _("enabled, ")); if (flags & NM_SETTING_DCB_FLAG_ADVERTISE) g_string_append (flag_str, _("advertise, ")); if (flags & NM_SETTING_DCB_FLAG_WILLING) g_string_append (flag_str, _("willing, ")); if (flag_str->str[flag_str->len-1] == '(') g_string_append (flag_str, _("unknown")); else g_string_truncate (flag_str, flag_str->len-2); /* chop off trailing ', ' */ g_string_append_c (flag_str, ')'); return g_string_free (flag_str, FALSE); } #define DEFINE_DCB_FLAGS_GETTER(func_name, property_name) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ guint v; \ GValue val = G_VALUE_INIT; \ g_value_init (&val, G_TYPE_UINT); \ g_object_get_property (G_OBJECT (setting), property_name, &val); \ v = g_value_get_uint (&val); \ g_value_unset (&val); \ return dcb_flags_to_string (v); \ } static char * dcb_app_priority_to_string (gint priority) { return (priority == -1) ? g_strdup (_("-1 (unset)")) : g_strdup_printf ("%d", priority); } #define DEFINE_DCB_APP_PRIORITY_GETTER(func_name, property_name) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ int v; \ GValue val = G_VALUE_INIT; \ g_value_init (&val, G_TYPE_INT); \ g_object_get_property (G_OBJECT (setting), property_name, &val); \ v = g_value_get_int (&val); \ g_value_unset (&val); \ return dcb_app_priority_to_string (v); \ } #define DEFINE_DCB_BOOL_GETTER(func_name, getter_func_name) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ NMSettingDcb *s_dcb = NM_SETTING_DCB (setting); \ GString *str; \ guint i; \ \ str = g_string_new (NULL); \ for (i = 0; i < 8; i++) { \ if (getter_func_name (s_dcb, i)) \ g_string_append_c (str, '1'); \ else \ g_string_append_c (str, '0'); \ \ if (i < 7) \ g_string_append_c (str, ','); \ } \ \ return g_string_free (str, FALSE); \ } #define DEFINE_DCB_UINT_GETTER(func_name, getter_func_name) \ static char * \ func_name (NMSetting *setting, NmcPropertyGetType get_type) \ { \ NMSettingDcb *s_dcb = NM_SETTING_DCB (setting); \ GString *str; \ guint i; \ \ str = g_string_new (NULL); \ for (i = 0; i < 8; i++) { \ g_string_append_printf (str, "%u", getter_func_name (s_dcb, i)); \ if (i < 7) \ g_string_append_c (str, ','); \ } \ \ return g_string_free (str, FALSE); \ } DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_app_fcoe_flags, NM_SETTING_DCB_APP_FCOE_FLAGS) DEFINE_DCB_APP_PRIORITY_GETTER (nmc_property_dcb_get_app_fcoe_priority, NM_SETTING_DCB_APP_FCOE_PRIORITY) DEFINE_GETTER (nmc_property_dcb_get_app_fcoe_mode, NM_SETTING_DCB_APP_FCOE_MODE) DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_app_iscsi_flags, NM_SETTING_DCB_APP_ISCSI_FLAGS) DEFINE_DCB_APP_PRIORITY_GETTER (nmc_property_dcb_get_app_iscsi_priority, NM_SETTING_DCB_APP_ISCSI_PRIORITY) DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_app_fip_flags, NM_SETTING_DCB_APP_FIP_FLAGS) DEFINE_DCB_APP_PRIORITY_GETTER (nmc_property_dcb_get_app_fip_priority, NM_SETTING_DCB_APP_FIP_PRIORITY) DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_pfc_flags, NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS) DEFINE_DCB_BOOL_GETTER (nmc_property_dcb_get_pfc, nm_setting_dcb_get_priority_flow_control) DEFINE_DCB_FLAGS_GETTER (nmc_property_dcb_get_pg_flags, NM_SETTING_DCB_PRIORITY_GROUP_FLAGS) DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_group_id, nm_setting_dcb_get_priority_group_id) DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_group_bandwidth, nm_setting_dcb_get_priority_group_bandwidth) DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_bandwidth, nm_setting_dcb_get_priority_bandwidth) DEFINE_DCB_BOOL_GETTER (nmc_property_dcb_get_pg_strict, nm_setting_dcb_get_priority_strict_bandwidth) DEFINE_DCB_UINT_GETTER (nmc_property_dcb_get_pg_traffic_class, nm_setting_dcb_get_priority_traffic_class) /* --- NM_SETTING_GSM_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_gsm_get_number, NM_SETTING_GSM_NUMBER) DEFINE_GETTER (nmc_property_gsm_get_username, NM_SETTING_GSM_USERNAME) DEFINE_GETTER (nmc_property_gsm_get_password, NM_SETTING_GSM_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_gsm_get_password_flags, NM_SETTING_GSM_PASSWORD_FLAGS) DEFINE_GETTER (nmc_property_gsm_get_apn, NM_SETTING_GSM_APN) DEFINE_GETTER (nmc_property_gsm_get_network_id, NM_SETTING_GSM_NETWORK_ID) DEFINE_GETTER (nmc_property_gsm_get_pin, NM_SETTING_GSM_PIN) DEFINE_SECRET_FLAGS_GETTER (nmc_property_gsm_get_pin_flags, NM_SETTING_GSM_PIN_FLAGS) DEFINE_GETTER (nmc_property_gsm_get_home_only, NM_SETTING_GSM_HOME_ONLY) DEFINE_GETTER (nmc_property_gsm_get_device_id, NM_SETTING_GSM_DEVICE_ID) DEFINE_GETTER (nmc_property_gsm_get_sim_id, NM_SETTING_GSM_SIM_ID) DEFINE_GETTER (nmc_property_gsm_get_sim_operator_id, NM_SETTING_GSM_SIM_OPERATOR_ID) /* --- NM_SETTING_INFINIBAND_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_ib_get_mac_address, NM_SETTING_INFINIBAND_MAC_ADDRESS) DEFINE_GETTER (nmc_property_ib_get_transport_mode, NM_SETTING_INFINIBAND_TRANSPORT_MODE) /* --- NM_SETTING_TUN_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_tun_get_owner, NM_SETTING_TUN_OWNER); DEFINE_GETTER (nmc_property_tun_get_group, NM_SETTING_TUN_GROUP); DEFINE_GETTER (nmc_property_tun_get_pi, NM_SETTING_TUN_PI); DEFINE_GETTER (nmc_property_tun_get_vnet_hdr, NM_SETTING_TUN_VNET_HDR); DEFINE_GETTER (nmc_property_tun_get_multi_queue, NM_SETTING_TUN_MULTI_QUEUE); /* --- NM_SETTING_IP_TUNNEL_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_ip_tunnel_get_parent, NM_SETTING_IP_TUNNEL_PARENT); DEFINE_GETTER (nmc_property_ip_tunnel_get_local, NM_SETTING_IP_TUNNEL_LOCAL); DEFINE_GETTER (nmc_property_ip_tunnel_get_remote, NM_SETTING_IP_TUNNEL_REMOTE); DEFINE_GETTER (nmc_property_ip_tunnel_get_ttl, NM_SETTING_IP_TUNNEL_TTL); DEFINE_GETTER (nmc_property_ip_tunnel_get_tos, NM_SETTING_IP_TUNNEL_TOS); DEFINE_GETTER (nmc_property_ip_tunnel_get_path_mtu_discovery, NM_SETTING_IP_TUNNEL_PATH_MTU_DISCOVERY); DEFINE_GETTER (nmc_property_ip_tunnel_get_input_key, NM_SETTING_IP_TUNNEL_INPUT_KEY); DEFINE_GETTER (nmc_property_ip_tunnel_get_output_key, NM_SETTING_IP_TUNNEL_OUTPUT_KEY); DEFINE_GETTER (nmc_property_ip_tunnel_get_encapsulation_limit, NM_SETTING_IP_TUNNEL_ENCAPSULATION_LIMIT); DEFINE_GETTER (nmc_property_ip_tunnel_get_flow_label, NM_SETTING_IP_TUNNEL_FLOW_LABEL); DEFINE_GETTER (nmc_property_ip_tunnel_get_mtu, NM_SETTING_IP_TUNNEL_MTU); static const char ** nmc_property_ip_tunnel_allowed_mode (NMSetting *setting, const char *prop) { static const char **words = NULL; if (!words) words = nm_utils_enum_get_values (nm_ip_tunnel_mode_get_type (), NM_IP_TUNNEL_MODE_UNKNOWN + 1, G_MAXINT); return words; } static char * nmc_property_ib_get_mtu (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingInfiniband *s_infiniband = NM_SETTING_INFINIBAND (setting); int mtu; mtu = nm_setting_infiniband_get_mtu (s_infiniband); if (mtu == 0) return g_strdup (_("auto")); else return g_strdup_printf ("%d", mtu); } static char * nmc_property_ib_get_p_key (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingInfiniband *s_infiniband = NM_SETTING_INFINIBAND (setting); int p_key; p_key = nm_setting_infiniband_get_p_key (s_infiniband); if (p_key == -1) return g_strdup (_("default")); else return g_strdup_printf ("0x%04x", p_key); } DEFINE_GETTER (nmc_property_ib_get_parent, NM_SETTING_INFINIBAND_PARENT) /* --- NM_SETTING_IP4_CONFIG_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_ipv4_get_method, NM_SETTING_IP_CONFIG_METHOD) DEFINE_GETTER (nmc_property_ipv4_get_dns, NM_SETTING_IP_CONFIG_DNS) DEFINE_GETTER (nmc_property_ipv4_get_dns_search, NM_SETTING_IP_CONFIG_DNS_SEARCH) DEFINE_GETTER_WITH_DEFAULT (nmc_property_ipv4_get_dns_options, NM_SETTING_IP_CONFIG_DNS_OPTIONS, !nm_setting_ip_config_has_dns_options ((NMSettingIPConfig *) setting)) static char * nmc_property_ip_get_addresses (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting); GString *printable; guint32 num_addresses, i; NMIPAddress *addr; printable = g_string_new (NULL); num_addresses = nm_setting_ip_config_get_num_addresses (s_ip); for (i = 0; i < num_addresses; i++) { addr = nm_setting_ip_config_get_address (s_ip, i); if (printable->len > 0) g_string_append (printable, ", "); g_string_append_printf (printable, "%s/%u", nm_ip_address_get_address (addr), nm_ip_address_get_prefix (addr)); } return g_string_free (printable, FALSE); } static char * nmc_property_ipvx_get_routes (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting); GString *printable; guint32 num_routes, i; NMIPRoute *route; printable = g_string_new (NULL); num_routes = nm_setting_ip_config_get_num_routes (s_ip); for (i = 0; i < num_routes; i++) { route = nm_setting_ip_config_get_route (s_ip, i); if (get_type == NMC_PROPERTY_GET_PARSABLE) { if (printable->len > 0) g_string_append (printable, ", "); g_string_append_printf (printable, "%s/%u", nm_ip_route_get_dest (route), nm_ip_route_get_prefix (route)); if (nm_ip_route_get_next_hop (route)) g_string_append_printf (printable, " %s", nm_ip_route_get_next_hop (route)); if (nm_ip_route_get_metric (route) != -1) g_string_append_printf (printable, " %u", (guint32) nm_ip_route_get_metric (route)); } else { if (printable->len > 0) g_string_append (printable, "; "); g_string_append (printable, "{ "); g_string_append_printf (printable, "ip = %s/%u", nm_ip_route_get_dest (route), nm_ip_route_get_prefix (route)); if (nm_ip_route_get_next_hop (route)) { g_string_append_printf (printable, ", nh = %s", nm_ip_route_get_next_hop (route)); } if (nm_ip_route_get_metric (route) != -1) g_string_append_printf (printable, ", mt = %u", (guint32) nm_ip_route_get_metric (route)); g_string_append (printable, " }"); } } return g_string_free (printable, FALSE); } static char * nmc_property_ipv4_get_routes (NMSetting *setting, NmcPropertyGetType get_type) { return nmc_property_ipvx_get_routes (setting, get_type); } DEFINE_GETTER (nmc_property_ipv4_get_gateway, NM_SETTING_IP_CONFIG_GATEWAY) DEFINE_GETTER (nmc_property_ipv4_get_route_metric, NM_SETTING_IP_CONFIG_ROUTE_METRIC) DEFINE_GETTER (nmc_property_ipv4_get_ignore_auto_routes, NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES) DEFINE_GETTER (nmc_property_ipv4_get_ignore_auto_dns, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS) DEFINE_GETTER (nmc_property_ipv4_get_dhcp_client_id, NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID) DEFINE_GETTER (nmc_property_ipv4_get_dhcp_timeout, NM_SETTING_IP_CONFIG_DHCP_TIMEOUT) DEFINE_GETTER (nmc_property_ipv4_get_dhcp_send_hostname, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME) DEFINE_GETTER (nmc_property_ipv4_get_dhcp_hostname, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME) DEFINE_GETTER (nmc_property_ipv4_get_dhcp_fqdn, NM_SETTING_IP4_CONFIG_DHCP_FQDN) DEFINE_GETTER (nmc_property_ipv4_get_never_default, NM_SETTING_IP_CONFIG_NEVER_DEFAULT) DEFINE_GETTER (nmc_property_ipv4_get_may_fail, NM_SETTING_IP_CONFIG_MAY_FAIL) static char * nmc_property_ipv4_get_dad_timeout (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingIPConfig *s_ip = NM_SETTING_IP_CONFIG (setting); gint dad_timeout; dad_timeout = nm_setting_ip_config_get_dad_timeout (s_ip); if (get_type == NMC_PROPERTY_GET_PARSABLE) return g_strdup_printf ("%d", dad_timeout); switch (dad_timeout) { case -1: return g_strdup_printf (_("%d (default)"), dad_timeout); case 0: return g_strdup_printf (_("%d (off)"), dad_timeout); default: return g_strdup_printf ("%d", dad_timeout); } } /* --- NM_SETTING_IP6_CONFIG_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_ipv6_get_method, NM_SETTING_IP_CONFIG_METHOD) DEFINE_GETTER (nmc_property_ipv6_get_dns, NM_SETTING_IP_CONFIG_DNS) DEFINE_GETTER (nmc_property_ipv6_get_dns_search, NM_SETTING_IP_CONFIG_DNS_SEARCH) DEFINE_GETTER_WITH_DEFAULT (nmc_property_ipv6_get_dns_options, NM_SETTING_IP_CONFIG_DNS_OPTIONS, !nm_setting_ip_config_has_dns_options ((NMSettingIPConfig *) setting)) static char * nmc_property_ipv6_get_routes (NMSetting *setting, NmcPropertyGetType get_type) { return nmc_property_ipvx_get_routes (setting, get_type); } DEFINE_GETTER (nmc_property_ipv6_get_gateway, NM_SETTING_IP_CONFIG_GATEWAY) DEFINE_GETTER (nmc_property_ipv6_get_route_metric, NM_SETTING_IP_CONFIG_ROUTE_METRIC) DEFINE_GETTER (nmc_property_ipv6_get_ignore_auto_routes, NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES) DEFINE_GETTER (nmc_property_ipv6_get_ignore_auto_dns, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS) DEFINE_GETTER (nmc_property_ipv6_get_never_default, NM_SETTING_IP_CONFIG_NEVER_DEFAULT) DEFINE_GETTER (nmc_property_ipv6_get_may_fail, NM_SETTING_IP_CONFIG_MAY_FAIL) DEFINE_GETTER (nmc_property_ipv6_get_dhcp_send_hostname, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME) DEFINE_GETTER (nmc_property_ipv6_get_dhcp_hostname, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME) static char * nmc_property_ipv6_get_ip6_privacy (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingIP6Config *s_ip6 = NM_SETTING_IP6_CONFIG (setting); return ip6_privacy_to_string (nm_setting_ip6_config_get_ip6_privacy (s_ip6), get_type); } /* --- NM_SETTING_OLPC_MESH_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_olpc_get_channel, NM_SETTING_OLPC_MESH_CHANNEL) DEFINE_GETTER (nmc_property_olpc_get_anycast_address, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS) static char * nmc_property_olpc_get_ssid (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingOlpcMesh *s_olpc_mesh = NM_SETTING_OLPC_MESH (setting); GBytes *ssid; char *ssid_str = NULL; ssid = nm_setting_olpc_mesh_get_ssid (s_olpc_mesh); if (ssid) { ssid_str = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid)); } return ssid_str; } /* --- NM_SETTING_PPP_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_ppp_get_noauth, NM_SETTING_PPP_NOAUTH) DEFINE_GETTER (nmc_property_ppp_get_refuse_eap, NM_SETTING_PPP_REFUSE_EAP) DEFINE_GETTER (nmc_property_ppp_get_refuse_pap, NM_SETTING_PPP_REFUSE_PAP) DEFINE_GETTER (nmc_property_ppp_get_refuse_chap, NM_SETTING_PPP_REFUSE_CHAP) DEFINE_GETTER (nmc_property_ppp_get_refuse_mschap, NM_SETTING_PPP_REFUSE_MSCHAP) DEFINE_GETTER (nmc_property_ppp_get_refuse_mschapv2, NM_SETTING_PPP_REFUSE_MSCHAPV2) DEFINE_GETTER (nmc_property_ppp_get_nobsdcomp, NM_SETTING_PPP_NOBSDCOMP) DEFINE_GETTER (nmc_property_ppp_get_nodeflate, NM_SETTING_PPP_NODEFLATE) DEFINE_GETTER (nmc_property_ppp_get_no_vj_comp, NM_SETTING_PPP_NO_VJ_COMP) DEFINE_GETTER (nmc_property_ppp_get_require_mppe, NM_SETTING_PPP_REQUIRE_MPPE) DEFINE_GETTER (nmc_property_ppp_get_require_mppe_128, NM_SETTING_PPP_REQUIRE_MPPE_128) DEFINE_GETTER (nmc_property_ppp_get_mppe_stateful, NM_SETTING_PPP_MPPE_STATEFUL) DEFINE_GETTER (nmc_property_ppp_get_crtscts, NM_SETTING_PPP_CRTSCTS) DEFINE_GETTER (nmc_property_ppp_get_baud, NM_SETTING_PPP_BAUD) DEFINE_GETTER (nmc_property_ppp_get_mru, NM_SETTING_PPP_MRU) DEFINE_GETTER (nmc_property_ppp_get_mtu, NM_SETTING_PPP_MTU) DEFINE_GETTER (nmc_property_ppp_get_lcp_echo_failure, NM_SETTING_PPP_LCP_ECHO_FAILURE) DEFINE_GETTER (nmc_property_ppp_get_lcp_echo_interval, NM_SETTING_PPP_LCP_ECHO_INTERVAL) /* --- NM_SETTING_PPPOE_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_pppoe_get_service, NM_SETTING_PPPOE_SERVICE) DEFINE_GETTER (nmc_property_pppoe_get_username, NM_SETTING_PPPOE_USERNAME) DEFINE_GETTER (nmc_property_pppoe_get_password, NM_SETTING_PPPOE_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_pppoe_get_password_flags, NM_SETTING_PPPOE_PASSWORD_FLAGS) /* --- NM_SETTING_SERIAL_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_serial_get_baud, NM_SETTING_SERIAL_BAUD) DEFINE_GETTER (nmc_property_serial_get_bits, NM_SETTING_SERIAL_BITS) DEFINE_GETTER (nmc_property_serial_get_stopbits, NM_SETTING_SERIAL_STOPBITS) DEFINE_GETTER (nmc_property_serial_get_send_delay, NM_SETTING_SERIAL_SEND_DELAY) /* --- NM_SETTING_VLAN_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_vlan_get_parent, NM_SETTING_VLAN_PARENT) DEFINE_GETTER (nmc_property_vlan_get_id, NM_SETTING_VLAN_ID) static char * nmc_property_vlan_get_flags (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting); return vlan_flags_to_string (nm_setting_vlan_get_flags (s_vlan)); } static char * nmc_property_vlan_get_ingress_priority_map (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting); return vlan_priorities_to_string (s_vlan, NM_VLAN_INGRESS_MAP); } static char * nmc_property_vlan_get_egress_priority_map (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingVlan *s_vlan = NM_SETTING_VLAN (setting); return vlan_priorities_to_string (s_vlan, NM_VLAN_EGRESS_MAP); } /* --- NM_SETTING_VPN_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_vpn_get_service_type, NM_SETTING_VPN_SERVICE_TYPE) DEFINE_GETTER (nmc_property_vpn_get_user_name, NM_SETTING_VPN_USER_NAME) static char * nmc_property_vpn_get_data (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingVpn *s_vpn = NM_SETTING_VPN (setting); GString *data_item_str; data_item_str = g_string_new (NULL); nm_setting_vpn_foreach_data_item (s_vpn, &vpn_data_item, data_item_str); return g_string_free (data_item_str, FALSE); } static char * nmc_property_vpn_get_secrets (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingVpn *s_vpn = NM_SETTING_VPN (setting); GString *secret_str; secret_str = g_string_new (NULL); nm_setting_vpn_foreach_secret (s_vpn, &vpn_data_item, secret_str); return g_string_free (secret_str, FALSE); } DEFINE_GETTER (nmc_property_vpn_get_persistent, NM_SETTING_VPN_PERSISTENT) DEFINE_GETTER (nmc_property_vpn_get_timeout, NM_SETTING_VPN_TIMEOUT) /* --- NM_SETTING_WIMAX_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_wimax_get_network_name, NM_SETTING_WIMAX_NETWORK_NAME) DEFINE_GETTER (nmc_property_wimax_get_mac_address, NM_SETTING_WIMAX_MAC_ADDRESS) /* --- NM_SETTING_WIRED_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_wired_get_port, NM_SETTING_WIRED_PORT) DEFINE_GETTER (nmc_property_wired_get_speed, NM_SETTING_WIRED_SPEED) DEFINE_GETTER (nmc_property_wired_get_duplex, NM_SETTING_WIRED_DUPLEX) DEFINE_GETTER (nmc_property_wired_get_auto_negotiate, NM_SETTING_WIRED_AUTO_NEGOTIATE) DEFINE_GETTER (nmc_property_wired_get_mac_address, NM_SETTING_WIRED_MAC_ADDRESS) DEFINE_GETTER (nmc_property_wired_get_cloned_mac_address, NM_SETTING_WIRED_CLONED_MAC_ADDRESS) DEFINE_GETTER (nmc_property_wired_get_mac_address_blacklist, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST) DEFINE_GETTER (nmc_property_wired_get_s390_subchannels, NM_SETTING_WIRED_S390_SUBCHANNELS) DEFINE_GETTER (nmc_property_wired_get_s390_nettype, NM_SETTING_WIRED_S390_NETTYPE) DEFINE_GETTER (nmc_property_wired_get_s390_options, NM_SETTING_WIRED_S390_OPTIONS) DEFINE_GETTER (nmc_property_wired_get_wake_on_lan_password, NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD) static char * nmc_property_wired_get_mtu (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWired *s_wired = NM_SETTING_WIRED (setting); int mtu; mtu = nm_setting_wired_get_mtu (s_wired); if (mtu == 0) return g_strdup (_("auto")); else return g_strdup_printf ("%d", mtu); } static char * nmc_property_wired_get_wake_on_lan (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWired *s_wired = NM_SETTING_WIRED (setting); NMSettingWiredWakeOnLan wol; char *tmp, *str; wol = nm_setting_wired_get_wake_on_lan (s_wired); tmp = nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), wol); if (get_type == NMC_PROPERTY_GET_PARSABLE) str = g_strdup_printf ("%s", tmp && *tmp ? tmp : "none"); else str = g_strdup_printf ("%d (%s)", wol, tmp && *tmp ? tmp : "none"); g_free (tmp); return str; } static gboolean nmc_property_wired_set_wake_on_lan (NMSetting *setting, const char *prop, const char *val, GError **error) { NMSettingWiredWakeOnLan wol; gs_free char *err_token = NULL; gboolean ret; long int t; if (nmc_string_to_int_base (val, 0, TRUE, 0, NM_SETTING_WIRED_WAKE_ON_LAN_ALL | NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS, &t)) wol = (NMSettingWiredWakeOnLan) t; else { ret = nm_utils_enum_from_str (nm_setting_wired_wake_on_lan_get_type (), val, (int *) &wol, &err_token); if (!ret) { if ( g_ascii_strcasecmp (err_token, "none") == 0 || g_ascii_strcasecmp (err_token, "disable") == 0 || g_ascii_strcasecmp (err_token, "disabled") == 0) wol = NM_SETTING_WIRED_WAKE_ON_LAN_NONE; else { g_set_error (error, 1, 0, _("invalid option '%s', use a combination of [%s] or 'ignore', 'default' or 'none'"), err_token, nm_utils_enum_to_str (nm_setting_wired_wake_on_lan_get_type (), NM_SETTING_WIRED_WAKE_ON_LAN_ALL)); return FALSE; } } } if ( NM_FLAGS_ANY (wol, NM_SETTING_WIRED_WAKE_ON_LAN_EXCLUSIVE_FLAGS) && !nm_utils_is_power_of_two (wol)) { g_set_error_literal (error, 1, 0, _("'default' and 'ignore' are incompatible with other flags")); return FALSE; } g_object_set (setting, prop, (guint) wol, NULL); return TRUE; } static char * nmc_property_ip_tunnel_get_mode (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingIPTunnel *s_ip_tunnel = NM_SETTING_IP_TUNNEL (setting); NMIPTunnelMode mode; mode = nm_setting_ip_tunnel_get_mode (s_ip_tunnel); return nm_utils_enum_to_str (nm_ip_tunnel_mode_get_type (), mode); } static gboolean nmc_property_ip_tunnel_set_mode (NMSetting *setting, const char *prop, const char *val, GError **error) { NMIPTunnelMode mode; gboolean ret; ret = nm_utils_enum_from_str (nm_ip_tunnel_mode_get_type(), val, (int *) &mode, NULL); if (!ret) { gs_free const char **values = NULL; gs_free char *values_str = NULL; values = nm_utils_enum_get_values (nm_ip_tunnel_mode_get_type (), NM_IP_TUNNEL_MODE_UNKNOWN + 1, G_MAXINT); values_str = g_strjoinv (",", (char **) values); g_set_error (error, 1, 0, _("invalid mode '%s', use one of %s"), val, values_str); return FALSE; } g_object_set (setting, prop, mode, NULL); return TRUE; } /* --- NM_SETTING_WIRELESS_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_wireless_get_mode, NM_SETTING_WIRELESS_MODE) DEFINE_GETTER (nmc_property_wireless_get_band, NM_SETTING_WIRELESS_BAND) DEFINE_GETTER (nmc_property_wireless_get_channel, NM_SETTING_WIRELESS_CHANNEL) DEFINE_GETTER (nmc_property_wireless_get_bssid, NM_SETTING_WIRELESS_BSSID) DEFINE_GETTER (nmc_property_wireless_get_rate, NM_SETTING_WIRELESS_RATE) DEFINE_GETTER (nmc_property_wireless_get_tx_power, NM_SETTING_WIRELESS_TX_POWER) DEFINE_GETTER (nmc_property_wireless_get_mac_address, NM_SETTING_WIRELESS_MAC_ADDRESS) DEFINE_GETTER (nmc_property_wireless_get_cloned_mac_address, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS) DEFINE_GETTER (nmc_property_wireless_get_mac_address_blacklist, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST) DEFINE_GETTER (nmc_property_wireless_get_seen_bssids, NM_SETTING_WIRELESS_SEEN_BSSIDS) DEFINE_GETTER (nmc_property_wireless_get_hidden, NM_SETTING_WIRELESS_HIDDEN) static char * nmc_property_wireless_get_ssid (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting); GBytes *ssid; char *ssid_str = NULL; ssid = nm_setting_wireless_get_ssid (s_wireless); if (ssid) { ssid_str = nm_utils_ssid_to_utf8 (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid)); } return ssid_str; } static char * nmc_property_wireless_get_mtu (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting); int mtu; mtu = nm_setting_wireless_get_mtu (s_wireless); if (mtu == 0) return g_strdup (_("auto")); else return g_strdup_printf ("%d", mtu); } static char * nmc_property_wireless_get_powersave (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (setting); NMSettingWirelessPowersave powersave; gs_free char *str = NULL; char *ret; powersave = nm_setting_wireless_get_powersave (s_wireless); str = nm_utils_enum_to_str (nm_setting_wireless_powersave_get_type (), powersave); if (get_type == NMC_PROPERTY_GET_PARSABLE) { ret = str; str = NULL; return ret; } else return g_strdup_printf ("%s (%u)", str, powersave); } static char * nmc_property_wireless_get_mac_address_randomization (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWireless *s_wifi = NM_SETTING_WIRELESS (setting); NMSettingMacRandomization randomization = nm_setting_wireless_get_mac_address_randomization (s_wifi); if (randomization == NM_SETTING_MAC_RANDOMIZATION_DEFAULT) return g_strdup (_("default")); else if (randomization == NM_SETTING_MAC_RANDOMIZATION_NEVER) return g_strdup (_("never")); else if (randomization == NM_SETTING_MAC_RANDOMIZATION_ALWAYS) return g_strdup_printf (_("always")); else return g_strdup_printf (_("unknown")); } /* --- NM_SETTING_WIRELESS_SECURITY_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_wifi_sec_get_key_mgmt, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT) DEFINE_GETTER (nmc_property_wifi_sec_get_wep_tx_keyidx, NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX) DEFINE_GETTER (nmc_property_wifi_sec_get_auth_alg, NM_SETTING_WIRELESS_SECURITY_AUTH_ALG) DEFINE_GETTER (nmc_property_wifi_sec_get_proto, NM_SETTING_WIRELESS_SECURITY_PROTO) DEFINE_GETTER (nmc_property_wifi_sec_get_pairwise, NM_SETTING_WIRELESS_SECURITY_PAIRWISE) DEFINE_GETTER (nmc_property_wifi_sec_get_group, NM_SETTING_WIRELESS_SECURITY_GROUP) DEFINE_GETTER (nmc_property_wifi_sec_get_leap_username, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME) DEFINE_SECRET_FLAGS_GETTER (nmc_property_wifi_sec_get_wep_key_flags, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS) DEFINE_GETTER (nmc_property_wifi_sec_get_psk, NM_SETTING_WIRELESS_SECURITY_PSK) DEFINE_SECRET_FLAGS_GETTER (nmc_property_wifi_sec_get_psk_flags, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS) DEFINE_GETTER (nmc_property_wifi_sec_get_leap_password, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD) DEFINE_SECRET_FLAGS_GETTER (nmc_property_wifi_sec_get_leap_password_flags, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS) static char * nmc_property_wifi_sec_get_wep_key0 (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting); return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 0)); } static char * nmc_property_wifi_sec_get_wep_key1 (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting); return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1)); } static char * nmc_property_wifi_sec_get_wep_key2 (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting); return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 2)); } static char * nmc_property_wifi_sec_get_wep_key3 (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting); return g_strdup (nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3)); } static char * nmc_property_wifi_sec_get_wep_key_type (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingWirelessSecurity *s_wireless_sec = NM_SETTING_WIRELESS_SECURITY (setting); return wep_key_type_to_string (nm_setting_wireless_security_get_wep_key_type (s_wireless_sec)); } /* --- NM_SETTING_MACVLAN_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_macvlan_get_parent, NM_SETTING_MACVLAN_PARENT) DEFINE_GETTER (nmc_property_macvlan_get_promiscuous, NM_SETTING_MACVLAN_PROMISCUOUS) DEFINE_GETTER (nmc_property_macvlan_get_tap, NM_SETTING_MACVLAN_TAP) static char * nmc_property_macvlan_get_mode (NMSetting *setting, NmcPropertyGetType get_type) { NMSettingMacvlan *s_macvlan = NM_SETTING_MACVLAN (setting); NMSettingMacvlanMode mode; char *tmp, *str; mode = nm_setting_macvlan_get_mode (s_macvlan); tmp = nm_utils_enum_to_str (nm_setting_macvlan_mode_get_type (), mode); if (get_type == NMC_PROPERTY_GET_PARSABLE) str = g_strdup (tmp ? tmp : ""); else str = g_strdup_printf ("%d (%s)", mode, tmp ? tmp : ""); g_free (tmp); return str; } static gboolean nmc_property_macvlan_set_mode (NMSetting *setting, const char *prop, const char *val, GError **error) { NMSettingMacvlanMode mode; gs_free const char **options = NULL; gs_free char *options_str = NULL; long int t; gboolean ret; if (nmc_string_to_int_base (val, 0, TRUE, 0, _NM_SETTING_MACVLAN_MODE_NUM - 1, &t)) mode = (NMSettingMacvlanMode) t; else { ret = nm_utils_enum_from_str (nm_setting_macvlan_mode_get_type (), val, (int *) &mode, NULL); if (!ret) { options = nm_utils_enum_get_values (nm_setting_macvlan_mode_get_type(), NM_SETTING_MACVLAN_MODE_UNKNOWN + 1, G_MAXINT); options_str = g_strjoinv (",", (char **) options); g_set_error (error, 1, 0, _("invalid option '%s', use one of [%s]"), val, options_str); return FALSE; } } g_object_set (setting, prop, (guint) mode, NULL); return TRUE; } static const char ** nmc_property_macvlan_allowed_mode (NMSetting *setting, const char *prop) { static const char **words = NULL; if (!words) words = nm_utils_enum_get_values (nm_setting_macvlan_mode_get_type(), NM_SETTING_MACVLAN_MODE_UNKNOWN + 1, G_MAXINT); return words; } /* --- NM_SETTING_VXLAN_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_vxlan_get_parent, NM_SETTING_VXLAN_PARENT) DEFINE_GETTER (nmc_property_vxlan_get_id, NM_SETTING_VXLAN_ID) DEFINE_GETTER (nmc_property_vxlan_get_local, NM_SETTING_VXLAN_LOCAL) DEFINE_GETTER (nmc_property_vxlan_get_remote, NM_SETTING_VXLAN_REMOTE) DEFINE_GETTER (nmc_property_vxlan_get_source_port_min, NM_SETTING_VXLAN_SOURCE_PORT_MIN) DEFINE_GETTER (nmc_property_vxlan_get_source_port_max, NM_SETTING_VXLAN_SOURCE_PORT_MAX) DEFINE_GETTER (nmc_property_vxlan_get_destination_port, NM_SETTING_VXLAN_DESTINATION_PORT) DEFINE_GETTER (nmc_property_vxlan_get_tos, NM_SETTING_VXLAN_TOS) DEFINE_GETTER (nmc_property_vxlan_get_ttl, NM_SETTING_VXLAN_TTL) DEFINE_GETTER (nmc_property_vxlan_get_ageing, NM_SETTING_VXLAN_AGEING) DEFINE_GETTER (nmc_property_vxlan_get_limit, NM_SETTING_VXLAN_LIMIT) DEFINE_GETTER (nmc_property_vxlan_get_learning, NM_SETTING_VXLAN_LEARNING) DEFINE_GETTER (nmc_property_vxlan_get_proxy, NM_SETTING_VXLAN_PROXY) DEFINE_GETTER (nmc_property_vxlan_get_rsc, NM_SETTING_VXLAN_RSC) DEFINE_GETTER (nmc_property_vxlan_get_l2_miss, NM_SETTING_VXLAN_L2_MISS) DEFINE_GETTER (nmc_property_vxlan_get_l3_miss, NM_SETTING_VXLAN_L3_MISS) /*----------------------------------------------------------------------------*/ static void nmc_value_transform_bool_string (const GValue *src_value, GValue *dest_value) { dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_int ? "yes" : "no"); } static void nmc_value_transform_char_string (const GValue *src_value, GValue *dest_value) { dest_value->data[0].v_pointer = g_strdup_printf ("%c", src_value->data[0].v_uint); } static void __attribute__((constructor)) register_nmcli_value_transforms (void) { g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_STRING, nmc_value_transform_bool_string); g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_STRING, nmc_value_transform_char_string); } /*----------------------------------------------------------------------------*/ /* Main hash table storing function pointer for manipulating properties */ static GHashTable *nmc_properties = NULL; typedef char * (*NmcPropertyGetFunc) (NMSetting *, NmcPropertyGetType); typedef gboolean (*NmcPropertySetFunc) (NMSetting *, const char *, const char *, GError **); typedef gboolean (*NmcPropertyRemoveFunc) (NMSetting *, const char *, const char *, guint32, GError **); typedef const char * (*NmcPropertyDescribeFunc) (NMSetting *, const char *); typedef const char ** (*NmcPropertyValuesFunc) (NMSetting *, const char *); typedef struct { /* The order of the fields is important as they correspond * to the order as _nmc_add_prop_funcs() passes the arguments. */ #define NmcPropertyFuncsFields \ NmcPropertyGetFunc get_func; /* func getting property values */ \ NmcPropertySetFunc set_func; /* func adding/setting property values */ \ NmcPropertyRemoveFunc remove_func; /* func removing items from container options */ \ NmcPropertyDescribeFunc describe_func; /* func returning property description */ \ NmcPropertyValuesFunc values_func; /* func returning allowed property values */ \ ; NmcPropertyFuncsFields } NmcPropertyFuncs; /* * We need NmCli in some _set_property functions, and they aren't passed NmCli. * So use the global variable. */ /* Global variable defined in nmcli.c */ extern NmCli nm_cli; NMSetting * nmc_setting_new_for_name (const char *name) { GType stype; NMSetting *setting = NULL; if (name) { stype = nm_setting_lookup_type (name); if (stype != G_TYPE_INVALID) { setting = g_object_new (stype, NULL); g_warn_if_fail (NM_IS_SETTING (setting)); } } return setting; } static gboolean get_answer (const char *prop, const char *value) { char *tmp_str; char *question; gboolean answer = FALSE; if (value) question = g_strdup_printf (_("Do you also want to set '%s' to '%s'? [yes]: "), prop, value); else question = g_strdup_printf (_("Do you also want to clear '%s'? [yes]: "), prop); tmp_str = nmc_get_user_input (question); if (!tmp_str || matches (tmp_str, "yes") == 0) answer = TRUE; g_free (tmp_str); g_free (question); return answer; } static void ipv4_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data); static void ipv6_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data); static void ipv4_addresses_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data) { static gboolean answered = FALSE; static gboolean answer = FALSE; g_signal_handlers_block_by_func (object, G_CALLBACK (ipv4_method_changed_cb), NULL); /* If we have some IP addresses set method to 'manual'. * Else if the method was 'manual', change it back to 'auto'. */ if (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) { if (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { if (!answered) { answered = TRUE; answer = get_answer ("ipv4.method", "manual"); } if (answer) g_object_set (object, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL); } } else { answered = FALSE; if (!g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) g_object_set (object, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); } g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv4_method_changed_cb), NULL); } static void ipv4_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data) { static GValue value = G_VALUE_INIT; static gboolean answered = FALSE; static gboolean answer = FALSE; g_signal_handlers_block_by_func (object, G_CALLBACK (ipv4_addresses_changed_cb), NULL); /* If method != manual, remove addresses (save them for restoring them later when method becomes 'manual' */ if (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { if (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) { if (!answered) { answered = TRUE; answer = get_answer ("ipv4.addresses", NULL); } if (answer) { if (G_IS_VALUE (&value)) g_value_unset (&value); nmc_property_get_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value); g_object_set (object, NM_SETTING_IP_CONFIG_ADDRESSES, NULL, NULL); } } } else { answered = FALSE; if (G_IS_VALUE (&value)) { nmc_property_set_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value); g_value_unset (&value); } } g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv4_addresses_changed_cb), NULL); } static void ipv6_addresses_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data) { static gboolean answered = FALSE; static gboolean answer = FALSE; g_signal_handlers_block_by_func (object, G_CALLBACK (ipv6_method_changed_cb), NULL); /* If we have some IP addresses set method to 'manual'. * Else if the method was 'manual', change it back to 'auto'. */ if (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) { if (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) { if (!answered) { answered = TRUE; answer = get_answer ("ipv6.method", "manual"); } if (answer) g_object_set (object, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL, NULL); } } else { answered = FALSE; if (!g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) g_object_set (object, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL); } g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv6_method_changed_cb), NULL); } static void ipv6_method_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data) { static GValue value = G_VALUE_INIT; static gboolean answered = FALSE; static gboolean answer = FALSE; g_signal_handlers_block_by_func (object, G_CALLBACK (ipv6_addresses_changed_cb), NULL); /* If method != manual, remove addresses (save them for restoring them later when method becomes 'manual' */ if (g_strcmp0 (nm_setting_ip_config_get_method (NM_SETTING_IP_CONFIG (object)), NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) { if (nm_setting_ip_config_get_num_addresses (NM_SETTING_IP_CONFIG (object))) { if (!answered) { answered = TRUE; answer = get_answer ("ipv6.addresses", NULL); } if (answer) { if (G_IS_VALUE (&value)) g_value_unset (&value); nmc_property_get_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value); g_object_set (object, NM_SETTING_IP_CONFIG_ADDRESSES, NULL, NULL); } } } else { answered = FALSE; if (G_IS_VALUE (&value)) { nmc_property_set_gvalue (NM_SETTING (object), NM_SETTING_IP_CONFIG_ADDRESSES, &value); g_value_unset (&value); } } g_signal_handlers_unblock_by_func (object, G_CALLBACK (ipv6_addresses_changed_cb), NULL); } static void wireless_band_channel_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data) { const char *value = NULL, *mode; char str[16]; NMSettingWireless *s_wireless = NM_SETTING_WIRELESS (object); if (strcmp (g_param_spec_get_name (pspec), NM_SETTING_WIRELESS_BAND) == 0) { value = nm_setting_wireless_get_band (s_wireless); if (!value) return; } else { guint32 channel = nm_setting_wireless_get_channel (s_wireless); if (channel == 0) return; g_snprintf (str, sizeof (str), "%d", nm_setting_wireless_get_channel (s_wireless)); value = str; } mode = nm_setting_wireless_get_mode (NM_SETTING_WIRELESS (object)); if (!mode || !*mode || strcmp (mode, NM_SETTING_WIRELESS_MODE_INFRA) == 0) { g_print (_("Warning: %s.%s set to '%s', but it might be ignored in infrastructure mode\n"), nm_setting_get_name (NM_SETTING (s_wireless)), g_param_spec_get_name (pspec), value); } } static void connection_master_changed_cb (GObject *object, GParamSpec *pspec, gpointer user_data) { NMSettingConnection *s_con = NM_SETTING_CONNECTION (object); NMConnection *connection = NM_CONNECTION (user_data); NMSetting *s_ipv4, *s_ipv6; const char *value, *tmp_str; value = nm_setting_connection_get_master (s_con); if (value) { s_ipv4 = nm_connection_get_setting_by_name (connection, NM_SETTING_IP4_CONFIG_SETTING_NAME); s_ipv6 = nm_connection_get_setting_by_name (connection, NM_SETTING_IP6_CONFIG_SETTING_NAME); if (s_ipv4 || s_ipv6) { g_print (_("Warning: setting %s.%s requires removing ipv4 and ipv6 settings\n"), nm_setting_get_name (NM_SETTING (s_con)), g_param_spec_get_name (pspec)); tmp_str = nmc_get_user_input (_("Do you want to remove them? [yes] ")); if (!tmp_str || matches (tmp_str, "yes") == 0) { if (s_ipv4) nm_connection_remove_setting (connection, G_OBJECT_TYPE (s_ipv4)); if (s_ipv6) nm_connection_remove_setting (connection, G_OBJECT_TYPE (s_ipv6)); } } } } void nmc_setting_ip4_connect_handlers (NMSettingIPConfig *setting) { g_return_if_fail (NM_IS_SETTING_IP4_CONFIG (setting)); g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_ADDRESSES, G_CALLBACK (ipv4_addresses_changed_cb), NULL); g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_METHOD, G_CALLBACK (ipv4_method_changed_cb), NULL); } void nmc_setting_ip6_connect_handlers (NMSettingIPConfig *setting) { g_return_if_fail (NM_IS_SETTING_IP6_CONFIG (setting)); g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_ADDRESSES, G_CALLBACK (ipv6_addresses_changed_cb), NULL); g_signal_connect (setting, "notify::" NM_SETTING_IP_CONFIG_METHOD, G_CALLBACK (ipv6_method_changed_cb), NULL); } void nmc_setting_wireless_connect_handlers (NMSettingWireless *setting) { g_return_if_fail (NM_IS_SETTING_WIRELESS (setting)); g_signal_connect (setting, "notify::" NM_SETTING_WIRELESS_BAND, G_CALLBACK (wireless_band_channel_changed_cb), NULL); g_signal_connect (setting, "notify::" NM_SETTING_WIRELESS_CHANNEL, G_CALLBACK (wireless_band_channel_changed_cb), NULL); } void nmc_setting_connection_connect_handlers (NMSettingConnection *setting, NMConnection *connection) { g_return_if_fail (NM_IS_SETTING_CONNECTION (setting)); g_signal_connect (setting, "notify::" NM_SETTING_CONNECTION_MASTER, G_CALLBACK (connection_master_changed_cb), connection); } /* * Customize some properties of the setting so that the setting has sensible * values. */ void nmc_setting_custom_init (NMSetting *setting) { g_return_if_fail (NM_IS_SETTING (setting)); if (NM_IS_SETTING_IP4_CONFIG (setting)) { g_object_set (NM_SETTING_IP_CONFIG (setting), NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); nmc_setting_ip4_connect_handlers (NM_SETTING_IP_CONFIG (setting)); } else if (NM_IS_SETTING_IP6_CONFIG (setting)) { g_object_set (NM_SETTING_IP_CONFIG (setting), NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL); nmc_setting_ip6_connect_handlers (NM_SETTING_IP_CONFIG (setting)); } else if (NM_IS_SETTING_WIRELESS (setting)) { g_object_set (NM_SETTING_WIRELESS (setting), NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA, NULL); nmc_setting_wireless_connect_handlers (NM_SETTING_WIRELESS (setting)); } } /* === SetFunc, RemoveFunc, DescribeFunc, ValuesFunc functions === */ static gboolean verify_string_list (char **strv, const char *prop, gboolean (*validate_func) (const char *), GError **error) { char **iter; g_return_val_if_fail (error == NULL || *error == NULL, FALSE); for (iter = strv; iter && *iter; iter++) { if (**iter == '\0') continue; if (validate_func) { if (!validate_func (*iter)) { g_set_error (error, 1, 0, _("'%s' is not valid"), *iter); return FALSE; } } } return TRUE; } /* Validate 'val' number against to int property spec */ static gboolean validate_int (NMSetting *setting, const char* prop, gint val, GError **error) { GParamSpec *pspec; GValue value = G_VALUE_INIT; gboolean success = TRUE; g_value_init (&value, G_TYPE_INT); g_value_set_int (&value, val); pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop); g_assert (G_IS_PARAM_SPEC (pspec)); if (g_param_value_validate (pspec, &value)) { GParamSpecInt *pspec_int = (GParamSpecInt *) pspec; g_set_error (error, 1, 0, _("'%d' is not valid; use <%d-%d>"), val, pspec_int->minimum, pspec_int->maximum); success = FALSE; } g_value_unset (&value); return success; } static gboolean validate_int64 (NMSetting *setting, const char* prop, gint64 val, GError **error) { GParamSpec *pspec; GValue value = G_VALUE_INIT; gboolean success = TRUE; g_value_init (&value, G_TYPE_INT64); g_value_set_int64 (&value, val); pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop); g_assert (G_IS_PARAM_SPEC (pspec)); if (g_param_value_validate (pspec, &value)) { GParamSpecInt64 *pspec_int = (GParamSpecInt64 *) pspec; G_STATIC_ASSERT (sizeof (long long) >= sizeof (gint64)); g_set_error (error, 1, 0, _("'%lld' is not valid; use <%lld-%lld>"), (long long) val, (long long) pspec_int->minimum, (long long) pspec_int->maximum); success = FALSE; } g_value_unset (&value); return success; } /* Validate 'val' number against to uint property spec */ static gboolean validate_uint (NMSetting *setting, const char* prop, guint val, GError **error) { GParamSpec *pspec; GValue value = G_VALUE_INIT; gboolean success = TRUE; g_value_init (&value, G_TYPE_UINT); g_value_set_uint (&value, val); pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop); g_assert (G_IS_PARAM_SPEC (pspec)); if (g_param_value_validate (pspec, &value)) { GParamSpecUInt *pspec_uint = (GParamSpecUInt *) pspec; g_set_error (error, 1, 0, _("'%u' is not valid; use <%u-%u>"), val, pspec_uint->minimum, pspec_uint->maximum); success = FALSE; } g_value_unset (&value); return success; } static char * flag_values_to_string (GFlagsValue *array, guint n) { GString *str; guint i; str = g_string_new (NULL); for (i = 0; i < n; i++) g_string_append_printf (str, "%u, ", array[i].value); if (str->len) g_string_truncate (str, str->len-2); /* chop off trailing ', ' */ return g_string_free (str, FALSE); } static gboolean validate_flags (NMSetting *setting, const char* prop, guint val, GError **error) { GParamSpec *pspec; GValue value = G_VALUE_INIT; gboolean success = TRUE; pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (setting)), prop); g_assert (G_IS_PARAM_SPEC (pspec)); g_value_init (&value, pspec->value_type); g_value_set_flags (&value, val); if (g_param_value_validate (pspec, &value)) { GParamSpecFlags *pspec_flags = (GParamSpecFlags *) pspec; char *flag_values = flag_values_to_string (pspec_flags->flags_class->values, pspec_flags->flags_class->n_values); g_set_error (error, 1, 0, _("'%u' flags are not valid; use combination of %s"), val, flag_values); g_free (flag_values); success = FALSE; } g_value_unset (&value); return success; } static gboolean check_and_set_string (NMSetting *setting, const char *prop, const char *val, const char **valid_strv, GError **error) { const char *checked_val; g_return_val_if_fail (error == NULL || *error == NULL, FALSE); checked_val = nmc_string_is_valid (val, valid_strv, error); if (!checked_val) return FALSE; g_object_set (setting, prop, checked_val, NULL); return TRUE; } #define DEFINE_SETTER_STR_LIST_MULTI(def_func, s_macro, set_func) \ static gboolean \ def_func (NMSetting *setting, \ const char *prop, \ const char *val, \ const char **valid_strv, \ GError **error) \ { \ char **strv = NULL, **iter; \ const char *item; \ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); \ strv = nmc_strsplit_set (val, " \t,", 0); \ for (iter = strv; iter && *iter; iter++) { \ if (!(item = nmc_string_is_valid (g_strstrip (*iter), valid_strv, error))) { \ g_strfreev (strv); \ return FALSE; \ } \ set_func (s_macro (setting), item); \ } \ g_strfreev (strv); \ return TRUE; \ } #define DEFINE_SETTER_OPTIONS(def_func, s_macro, s_type, add_func, valid_func1, valid_func2) \ static gboolean \ def_func (NMSetting *setting, const char *prop, const char *val, GError **error) \ { \ char **strv = NULL, **iter; \ const char **(*valid_func1_p) (s_type *) = valid_func1; \ const char * (*valid_func2_p) (const char *, const char *, GError **) = valid_func2; \ const char *opt_name, *opt_val; \ \ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); \ \ strv = nmc_strsplit_set (val, ",", 0); \ for (iter = strv; iter && *iter; iter++) { \ char *left = g_strstrip (*iter); \ char *right = strchr (left, '='); \ if (!right) { \ g_set_error (error, 1, 0, _("'%s' is not valid; use