summaryrefslogtreecommitdiff
path: root/src/initrd/nmi-cmdline-reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/initrd/nmi-cmdline-reader.c')
-rw-r--r--src/initrd/nmi-cmdline-reader.c62
1 files changed, 54 insertions, 8 deletions
diff --git a/src/initrd/nmi-cmdline-reader.c b/src/initrd/nmi-cmdline-reader.c
index afb9355897..205f8d0d45 100644
--- a/src/initrd/nmi-cmdline-reader.c
+++ b/src/initrd/nmi-cmdline-reader.c
@@ -684,6 +684,43 @@ parse_rd_peerdns (GHashTable *connections, char *argument)
}
static void
+parse_rd_znet (GHashTable *connections, char *argument)
+{
+ const char *nettype;
+ const char *subchannels[4] = { 0, 0, 0, 0 };
+ const char *tmp;
+ NMConnection *connection;
+ NMSettingWired *s_wired;
+
+ nettype = get_word (&argument, ',');
+ subchannels[0] = get_word (&argument, ',');
+ subchannels[1] = get_word (&argument, ',');
+ if (!nm_streq0 (nettype, "ctc"))
+ subchannels[2] = get_word (&argument, ',');
+
+ connection = get_conn (connections, NULL, NM_SETTING_WIRED_SETTING_NAME);
+ s_wired = nm_connection_get_setting_wired (connection);
+ g_object_set (s_wired,
+ NM_SETTING_WIRED_S390_NETTYPE, nettype,
+ NM_SETTING_WIRED_S390_SUBCHANNELS, &subchannels,
+ NULL);
+
+ while ((tmp = get_word (&argument, ',')) != NULL) {
+ char *val;
+
+ val = strchr (tmp, '=');
+ if (val) {
+ gs_free char *key = NULL;
+
+ key = g_strndup (tmp, val - tmp);
+ val[0] = '\0';
+ val++;
+ nm_setting_wired_add_s390_option (s_wired, key, val);
+ }
+ }
+}
+
+static void
_normalize_conn (gpointer key, gpointer value, gpointer user_data)
{
NMConnection *connection = value;
@@ -692,20 +729,24 @@ _normalize_conn (gpointer key, gpointer value, gpointer user_data)
}
GHashTable *
-nmi_cmdline_reader_parse (const char *sysfs_dir, char **argv)
+nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv)
{
GHashTable *connections;
const char *tag;
- char *argument;
gboolean ignore_bootif = FALSE;
gboolean neednet = FALSE;
- char *bootif = NULL;
+ gs_free char *bootif_val = NULL;
int i;
connections = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_object_unref);
for (i = 0; argv[i]; i++) {
- argument = argv[i];
+ gs_free char *argument_clone = NULL;
+ char *argument;
+
+ argument_clone = g_strdup (argv[i]);
+ argument = argument_clone;
+
tag = get_word (&argument, '=');
if (strcmp (tag, "ip") == 0)
parse_ip (connections, sysfs_dir, argument);
@@ -729,15 +770,20 @@ nmi_cmdline_reader_parse (const char *sysfs_dir, char **argv)
ignore_bootif = !_nm_utils_ascii_str_to_bool (argument, TRUE);
else if (strcmp (tag, "rd.neednet") == 0)
neednet = _nm_utils_ascii_str_to_bool (argument, TRUE);
- else if (strcasecmp (tag, "BOOTIF") == 0)
- bootif = argument;
+ else if (strcmp (tag, "rd.znet") == 0)
+ parse_rd_znet (connections, argument);
+ else if (strcasecmp (tag, "BOOTIF") == 0) {
+ nm_clear_g_free (&bootif_val);
+ bootif_val = g_strdup (argument);
+ }
}
if (ignore_bootif)
- bootif = NULL;
- if (bootif) {
+ nm_clear_g_free (&bootif_val);
+ if (bootif_val) {
NMConnection *connection;
NMSettingWired *s_wired;
+ const char *bootif = bootif_val;
if ( !nm_utils_hwaddr_valid (bootif, ETH_ALEN)
&& g_str_has_prefix (bootif, "01-")