summary refs log tree commit diff
path: root/src/nm-initrd-generator
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-initrd-generator')
-rw-r--r--src/nm-initrd-generator/nm-initrd-generator.c176
-rw-r--r--src/nm-initrd-generator/nmi-cmdline-reader.c11
-rw-r--r--src/nm-initrd-generator/nmi-dt-reader.c4
-rw-r--r--src/nm-initrd-generator/nmi-ibft-reader.c2
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);
     }