/* * Compare versions of nmcli and NM daemon. * Return: TRUE - the versions match (when only major and minor match, print a warning) * FALSE - versions mismatch */ gboolean nmc_versions_match (NmCli *nmc) { const char *nm_ver = NULL; const char *dot; gboolean match = FALSE; g_return_val_if_fail (nmc != NULL, FALSE); /* --nocheck option - don't compare the versions */ if (nmc->nocheck_ver) return TRUE; nmc->get_client (nmc); nm_ver = nm_client_get_version (nmc->client); if (nm_ver) { if (!strcmp (nm_ver, VERSION)) match = TRUE; else { dot = strchr (nm_ver, '.'); if (dot) { dot = strchr (dot + 1, '.'); if (dot && !strncmp (nm_ver, VERSION, dot-nm_ver)) { g_printerr (_("Warning: nmcli (%s) and NetworkManager (%s) versions don't match. Use --nocheck to suppress the warning.\n"), VERSION, nm_ver); match = TRUE; } } } } if (!match) { g_string_printf (nmc->return_text, _("Error: nmcli (%s) and NetworkManager (%s) versions don't match. Force execution using --nocheck, but the results are unpredictable."), VERSION, nm_ver ? nm_ver : _("unknown")); nmc->return_value = NMC_RESULT_ERROR_VERSIONS_MISMATCH; } return match; }
static gboolean show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_flds) { gboolean startup = FALSE; NMState state = NM_STATE_UNKNOWN; NMConnectivityState connectivity = NM_CONNECTIVITY_UNKNOWN; gboolean net_enabled; gboolean wireless_hw_enabled, wireless_enabled; gboolean wwan_hw_enabled, wwan_enabled; GError *error = NULL; const char *fields_str; const char *fields_all = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_ALL; const char *fields_common = print_flds ? print_flds : NMC_FIELDS_NM_STATUS_COMMON; NmcOutputField *tmpl, *arr; size_t tmpl_len; if (!nmc->required_fields || strcasecmp (nmc->required_fields, "common") == 0) fields_str = fields_common; else if (!nmc->required_fields || strcasecmp (nmc->required_fields, "all") == 0) fields_str = fields_all; else fields_str = nmc->required_fields; tmpl = nmc_fields_nm_status; tmpl_len = sizeof (nmc_fields_nm_status); nmc->print_fields.indices = parse_output_fields (fields_str, tmpl, FALSE, NULL, &error); if (error) { g_string_printf (nmc->return_text, _("Error: only these fields are allowed: %s"), fields_all); g_error_free (error); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return FALSE; } nmc->get_client (nmc); /* create NMClient */ if (!nm_client_get_nm_running (nmc->client)) { g_string_printf (nmc->return_text, _("Error: NetworkManager is not running.")); nmc->return_value = NMC_RESULT_ERROR_NM_NOT_RUNNING; return FALSE; } state = nm_client_get_state (nmc->client); startup = nm_client_get_startup (nmc->client); connectivity = nm_client_get_connectivity (nmc->client); net_enabled = nm_client_networking_get_enabled (nmc->client); wireless_hw_enabled = nm_client_wireless_hardware_get_enabled (nmc->client); wireless_enabled = nm_client_wireless_get_enabled (nmc->client); wwan_hw_enabled = nm_client_wwan_hardware_get_enabled (nmc->client); wwan_enabled = nm_client_wwan_get_enabled (nmc->client); nmc->print_fields.header_name = pretty_header_name ? (char *) pretty_header_name : _("NetworkManager status"); arr = nmc_dup_fields_array (tmpl, tmpl_len, NMC_OF_FLAG_MAIN_HEADER_ADD | NMC_OF_FLAG_FIELD_NAMES); g_ptr_array_add (nmc->output_data, arr); arr = nmc_dup_fields_array (tmpl, tmpl_len, 0); set_val_strc (arr, 0, _("running")); set_val_strc (arr, 1, nm_client_get_version (nmc->client)); set_val_strc (arr, 2, nm_state_to_string (state)); set_val_strc (arr, 3, startup ? _("starting") : _("started")); set_val_strc (arr, 4, nm_connectivity_to_string (connectivity)); set_val_strc (arr, 5, net_enabled ? _("enabled") : _("disabled")); set_val_strc (arr, 6, wireless_hw_enabled ? _("enabled") : _("disabled")); set_val_strc (arr, 7, wireless_enabled ? _("enabled") : _("disabled")); set_val_strc (arr, 8, wwan_hw_enabled ? _("enabled") : _("disabled")); set_val_strc (arr, 9, wwan_enabled ? _("enabled") : _("disabled")); /* Set colors */ arr[2].color = state_to_color (state); arr[3].color = startup ? NMC_TERM_COLOR_YELLOW : NMC_TERM_COLOR_GREEN; arr[4].color = connectivity_to_color (connectivity); arr[5].color = net_enabled ? NMC_TERM_COLOR_GREEN : NMC_TERM_COLOR_RED; arr[6].color = wireless_hw_enabled ? NMC_TERM_COLOR_GREEN : NMC_TERM_COLOR_RED; arr[7].color = wireless_enabled ? NMC_TERM_COLOR_GREEN : NMC_TERM_COLOR_RED; arr[8].color = wwan_hw_enabled ? NMC_TERM_COLOR_GREEN : NMC_TERM_COLOR_RED; arr[9].color = wwan_enabled ? NMC_TERM_COLOR_GREEN : NMC_TERM_COLOR_RED; g_ptr_array_add (nmc->output_data, arr); print_data (nmc); /* Print all data */ return TRUE; }