diff options
Diffstat (limited to 'src/nm-initrd-generator')
| -rw-r--r-- | src/nm-initrd-generator/nm-initrd-generator.c | 176 | ||||
| -rw-r--r-- | src/nm-initrd-generator/nmi-cmdline-reader.c | 11 | ||||
| -rw-r--r-- | src/nm-initrd-generator/nmi-dt-reader.c | 4 | ||||
| -rw-r--r-- | src/nm-initrd-generator/nmi-ibft-reader.c | 2 |
4 files changed, 119 insertions, 74 deletions
diff --git a/src/nm-initrd-generator/nm-initrd-generator.c b/src/nm-initrd-generator/nm-initrd-generator.c index 981cb14b..09f8baf2 100644 --- a/src/nm-initrd-generator/nm-initrd-generator.c +++ b/src/nm-initrd-generator/nm-initrd-generator.c @@ -26,6 +26,18 @@ /*****************************************************************************/ static void +add_keyfile_comment(GKeyFile *keyfile, char *reason) +{ + gs_free char *comment = NULL; + + comment = g_strdup_printf(" Created by nm-initrd-generator%s%s%s", + reason ? " (" : "", + reason ? reason : "", + reason ? ")" : ""); + g_key_file_set_comment(keyfile, NULL, NULL, comment, NULL); +} + +static void output_conn(gpointer key, gpointer value, gpointer user_data) { const char *basename = key; @@ -48,9 +60,12 @@ output_conn(gpointer key, gpointer value, gpointer user_data) goto err_out; file = nm_keyfile_write(connection, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error); - if (file == NULL) + if (!file) goto err_out; + if (connections_dir) + add_keyfile_comment(file, NULL); + data = g_key_file_to_data(file, &len, &error); if (!data) goto err_out; @@ -88,55 +103,57 @@ main(int argc, char *argv[]) gboolean dump_to_stdout = FALSE; gs_strfreev char **remaining = NULL; GOptionEntry option_entries[] = { - {"connections-dir", - 'c', - 0, - G_OPTION_ARG_FILENAME, - &connections_dir, - "Output connection directory", - NM_KEYFILE_PATH_NAME_RUN}, - {"persistent-connections-dir", - 'p', - 0, - G_OPTION_ARG_FILENAME, - &etc_connections_dir, - "Persistent connection directory", - NM_KEYFILE_PATH_NAME_ETC_DEFAULT}, - {"initrd-data-dir", - 'i', - 0, - G_OPTION_ARG_FILENAME, - &initrd_dir, - "Output initrd data directory", - DEFAULT_INITRD_DATA_DIR}, - {"sysfs-dir", - 'd', - 0, - G_OPTION_ARG_FILENAME, - &sysfs_dir, - "The sysfs mount point", - DEFAULT_SYSFS_DIR}, - {"run-config-dir", - 'r', - 0, - G_OPTION_ARG_FILENAME, - &run_config_dir, - "Output config directory", - DEFAULT_RUN_CONFIG_DIR}, - {"stdout", - 's', - 0, - G_OPTION_ARG_NONE, - &dump_to_stdout, - "Dump connections to standard output", - NULL}, - {G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL}, - {NULL}}; + {"connections-dir", + 'c', + 0, + G_OPTION_ARG_FILENAME, + &connections_dir, + "Output connection directory", + NM_KEYFILE_PATH_NAME_RUN}, + {"persistent-connections-dir", + 'p', + 0, + G_OPTION_ARG_FILENAME, + &etc_connections_dir, + "Persistent connection directory", + NM_KEYFILE_PATH_NAME_ETC_DEFAULT}, + {"initrd-data-dir", + 'i', + 0, + G_OPTION_ARG_FILENAME, + &initrd_dir, + "Output initrd data directory", + DEFAULT_INITRD_DATA_DIR}, + {"sysfs-dir", + 'd', + 0, + G_OPTION_ARG_FILENAME, + &sysfs_dir, + "The sysfs mount point", + DEFAULT_SYSFS_DIR}, + {"run-config-dir", + 'r', + 0, + G_OPTION_ARG_FILENAME, + &run_config_dir, + "Output config directory", + DEFAULT_RUN_CONFIG_DIR}, + {"stdout", + 's', + 0, + G_OPTION_ARG_NONE, + &dump_to_stdout, + "Dump connections to standard output", + NULL}, + {G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &remaining, NULL, NULL}, + {NULL}}; nm_auto_free_option_context GOptionContext *option_context = NULL; gs_free_error GError *error = NULL; gs_free char *hostname = NULL; int errsv; gint64 carrier_timeout_sec = 0; + gs_unref_array GArray *confs = NULL; + guint i; option_context = g_option_context_new( "-- [ip=...] [rd.route=...] [bridge=...] [bond=...] [team=...] [vlan=...] " @@ -178,15 +195,57 @@ main(int argc, char *argv[]) &hostname, &carrier_timeout_sec); + confs = g_array_new(FALSE, FALSE, sizeof(NMUtilsNamedValue)); + g_array_set_clear_func(confs, (GDestroyNotify) nm_utils_named_value_clear_with_g_free); + + { + nm_auto_unref_keyfile GKeyFile *keyfile = NULL; + NMUtilsNamedValue v; + + keyfile = g_key_file_new(); + g_key_file_set_list_separator(keyfile, NM_CONFIG_KEYFILE_LIST_SEPARATOR); + + g_key_file_set_value(keyfile, + NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE "-15-carrier-timeout", + NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE, + "*"); + g_key_file_set_int64(keyfile, + NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE "-15-carrier-timeout", + NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT, + (carrier_timeout_sec != 0 ? carrier_timeout_sec : 10) * 1000); + if (carrier_timeout_sec == 0) { + g_key_file_set_value(keyfile, + NM_CONFIG_KEYFILE_GROUP_CONFIG, + NM_CONFIG_KEYFILE_KEY_CONFIG_ENABLE, + "env:initrd"); + } + + if (!dump_to_stdout) { + add_keyfile_comment(keyfile, + carrier_timeout_sec == 0 ? "default initrd carrier timeout" + : "from \"rd.net.timeout.carrier\""); + } + + v = (NMUtilsNamedValue){ + .name = g_strdup_printf("%s/15-carrier-timeout.conf", run_config_dir), + .value_str = g_key_file_to_data(keyfile, NULL, NULL), + }; + g_array_append_val(confs, v); + } + if (dump_to_stdout) { nm_clear_g_free(&connections_dir); nm_clear_g_free(&initrd_dir); nm_clear_g_free(&run_config_dir); if (hostname) g_print("\n*** Hostname '%s' ***\n", hostname); - if (carrier_timeout_sec != 0) - g_print("\n*** Carrier Wait Timeout %" G_GINT64_FORMAT " sec ***\n", - carrier_timeout_sec); + + for (i = 0; i < confs->len; i++) { + NMUtilsNamedValue *v = &g_array_index(confs, NMUtilsNamedValue, i); + gs_free char *name = g_path_get_basename(v->name); + + g_print("\n*** Configuration '%s' ***\n\n%s\n", name, v->value_str); + } } else { if (g_mkdir_with_parents(connections_dir, 0755) != 0) { errsv = errno; @@ -216,25 +275,12 @@ main(int argc, char *argv[]) return 1; } } - if (carrier_timeout_sec != 0) { - nm_auto_unref_keyfile GKeyFile *keyfile = NULL; - gs_free char *filename = NULL; - keyfile = g_key_file_new(); - g_key_file_set_list_separator(keyfile, NM_CONFIG_KEYFILE_LIST_SEPARATOR); - filename = g_strdup_printf("%s/15-carrier-timeout.conf", run_config_dir); + for (i = 0; i < confs->len; i++) { + NMUtilsNamedValue *v = &g_array_index(confs, NMUtilsNamedValue, i); - g_key_file_set_value(keyfile, - NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE "-15-carrier-timeout", - NM_CONFIG_KEYFILE_KEY_MATCH_DEVICE, - "*"); - g_key_file_set_int64(keyfile, - NM_CONFIG_KEYFILE_GROUPPREFIX_DEVICE "-15-carrier-timeout", - NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT, - carrier_timeout_sec * 1000); - - if (!g_key_file_save_to_file(keyfile, filename, &error)) { - _LOGW(LOGD_CORE, "%s: %s", filename, error->message); + if (!g_file_set_contents(v->name, v->value_str, strlen(v->value_str), &error)) { + _LOGW(LOGD_CORE, "%s: %s", v->name, error->message); return 1; } } diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c index 412c7510..34b19e45 100644 --- a/src/nm-initrd-generator/nmi-cmdline-reader.c +++ b/src/nm-initrd-generator/nmi-cmdline-reader.c @@ -12,7 +12,6 @@ #include "libnm-log-core/nm-logging.h" #include "libnm-core-intern/nm-core-internal.h" #include "nm-initrd-generator.h" -#include "libnm-systemd-shared/nm-sd-utils-shared.h" /*****************************************************************************/ @@ -134,7 +133,7 @@ reader_create_connection(Reader *reader, NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE, NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, - (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64, + (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_DEFAULT_OR_EUI64, NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, reader->ignore_auto_dns, NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, @@ -535,8 +534,8 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) int client_ip_prefix = -1; gboolean clear_ip4_required_timeout = TRUE; const char *dns[2] = { - NULL, - NULL, + NULL, + NULL, }; int dns_addr_family[2] = { AF_UNSPEC, @@ -586,7 +585,7 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) } } - if (client_hostname && !nm_sd_hostname_is_valid(client_hostname, FALSE)) + if (client_hostname && !nm_hostname_is_valid(client_hostname, FALSE)) client_hostname = NULL; if (client_hostname) { @@ -634,7 +633,7 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) NMIPAddr addr; if (is_ipv4 && nm_utils_parse_inaddr_bin(AF_INET, netmask, NULL, &addr)) - client_ip_prefix = nm_utils_ip4_netmask_to_prefix(addr.addr4); + client_ip_prefix = _nm_utils_ip4_netmask_to_prefix(addr.addr4); else client_ip_prefix = _nm_utils_ascii_str_to_int64(netmask, 10, 0, is_ipv4 ? 32 : 128, -1); diff --git a/src/nm-initrd-generator/nmi-dt-reader.c b/src/nm-initrd-generator/nmi-dt-reader.c index 8bd591a8..554f5c4d 100644 --- a/src/nm-initrd-generator/nmi-dt-reader.c +++ b/src/nm-initrd-generator/nmi-dt-reader.c @@ -258,7 +258,7 @@ nmi_dt_reader_parse(const char *sysfs_dir) g_object_set(s_ip6, NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, - (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64, + (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_DEFAULT_OR_EUI64, NULL); if (!bootp && dt_get_property(base, "chosen", "bootp-response", NULL, NULL)) @@ -288,7 +288,7 @@ nmi_dt_reader_parse(const char *sysfs_dir) guint32 netmask_v4; nm_ip_address_get_address_binary(netmask, &netmask_v4); - prefix = nm_utils_ip4_netmask_to_prefix(netmask_v4); + prefix = _nm_utils_ip4_netmask_to_prefix(netmask_v4); } if (prefix == -1) diff --git a/src/nm-initrd-generator/nmi-ibft-reader.c b/src/nm-initrd-generator/nmi-ibft-reader.c index 196bb141..5e4b1bb3 100644 --- a/src/nm-initrd-generator/nmi-ibft-reader.c +++ b/src/nm-initrd-generator/nmi-ibft-reader.c @@ -164,7 +164,7 @@ ip_setting_add_from_block(GHashTable *nic, NMConnection *connection, GError **er g_object_set(s_ip6, NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, - (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64, + (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_DEFAULT_OR_EUI64, NULL); } |