diff options
author | Dan Williams <dcbw@redhat.com> | 2014-08-29 18:51:34 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2014-08-29 18:51:34 -0500 |
commit | fc9c1f1557b517e799d15802e8f3d0ea43b0daea (patch) | |
tree | 17709fc622b965f462b9f23156b0eb8fb8109aa7 | |
parent | 0c54a617e9b4019c24b5f2da047885cfae843c08 (diff) | |
parent | a175ff090cac3172f9e194335fac38056e046504 (diff) | |
download | NetworkManager-fc9c1f1557b517e799d15802e8f3d0ea43b0daea.tar.gz |
merge: add settings plugin for reading iBFT configuration (bgo #734009) (rh #990480)
34 files changed, 1664 insertions, 1230 deletions
diff --git a/.gitignore b/.gitignore index ca36160d4c..6df12700a8 100644 --- a/.gitignore +++ b/.gitignore @@ -222,6 +222,7 @@ valgrind-*.log /src/dhcp-manager/tests/test-dhcp-dhclient /src/dhcp-manager/tests/test-dhcp-options /src/dnsmasq-manager/tests/test-dnsmasq-utils +/src/settings/plugins/ibft/tests/test-ibft /src/settings/plugins/ifcfg-rh/tests/network-scripts/*-Test_Write_* /src/settings/plugins/ifcfg-rh/tests/network-scripts/Test_Write_* /src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh diff --git a/configure.ac b/configure.ac index 6bc94b948f..1bc73f6eb7 100644 --- a/configure.ac +++ b/configure.ac @@ -843,6 +843,8 @@ src/settings/plugins/ifnet/tests/Makefile src/settings/plugins/ifcfg-rh/Makefile src/settings/plugins/ifcfg-rh/tests/Makefile src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile +src/settings/plugins/ibft/Makefile +src/settings/plugins/ibft/tests/Makefile src/settings/plugins/ifcfg-suse/Makefile src/settings/plugins/keyfile/Makefile src/settings/plugins/keyfile/tests/Makefile diff --git a/include/nm-test-utils.h b/include/nm-test-utils.h index 9c8009355d..0bff1c2997 100644 --- a/include/nm-test-utils.h +++ b/include/nm-test-utils.h @@ -958,5 +958,51 @@ nmtst_assert_connection_unnormalizable (NMConnection *con, #endif +static inline void +nmtst_assert_ip4_address_equals (guint32 addr, const char *expected, const char *loc) +{ + guint32 addr2 = nmtst_inet4_from_string (expected); + + if (addr != addr2) + g_error ("assert: %s: ip4 address '%s' expected, but got %s", + loc, expected ? expected : "any", nm_utils_inet4_ntop (addr, NULL)); +} +#define nmtst_assert_ip4_address_equals(addr, expected) \ + nmtst_assert_ip4_address_equals (addr, expected, G_STRLOC) + +#ifdef __NM_UTILS_H__ +static inline void +nmtst_assert_hwaddr_equals (gconstpointer hwaddr1, gssize hwaddr1_len, const char *expected, const char *loc) +{ + guint8 buf2[NM_UTILS_HWADDR_LEN_MAX]; + gsize hwaddr2_len = 1; + const char *p; + gboolean success; + + g_assert (hwaddr1_len > 0 && hwaddr1_len <= NM_UTILS_HWADDR_LEN_MAX); + + g_assert (expected); + for (p = expected; *p; p++) { + if (*p == ':' || *p == '-') + hwaddr2_len++; + } + g_assert (hwaddr2_len <= NM_UTILS_HWADDR_LEN_MAX); + g_assert (nm_utils_hwaddr_aton (expected, buf2, hwaddr2_len)); + + /* Manually check the entire hardware address instead of using + * nm_utils_hwaddr_matches() because that function doesn't compare + * entire InfiniBand addresses for various (legitimate) reasons. + */ + success = (hwaddr1_len == hwaddr2_len); + if (success) + success = !memcmp (hwaddr1, buf2, hwaddr1_len); + if (!success) { + g_error ("assert: %s: hwaddr '%s' (%zd) expected, but got %s (%zd)", + loc, expected, hwaddr2_len, nm_utils_hwaddr_ntoa (hwaddr1, hwaddr1_len), hwaddr1_len); + } +} +#define nmtst_assert_hwaddr_equals(hwaddr1, hwaddr1_len, expected) \ + nmtst_assert_hwaddr_equals (hwaddr1, hwaddr1_len, expected, G_STRLOC) +#endif #endif /* __NM_TEST_UTILS_H__ */ diff --git a/po/POTFILES.in b/po/POTFILES.in index 2c6c0e3e53..a7e75c43a7 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -123,5 +123,6 @@ src/nm-config.c src/nm-logging.c src/nm-manager.c src/nm-sleep-monitor-systemd.c +src/settings/plugins/ibft/plugin.c src/settings/plugins/ifcfg-rh/reader.c src/settings/nm-settings-utils.c diff --git a/src/nm-manager.c b/src/nm-manager.c index fd7d071456..6b8ed909ac 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1078,6 +1078,7 @@ system_create_virtual_device (NMManager *self, NMConnection *connection) GSList *iter; char *iface = NULL; NMDevice *device = NULL, *parent = NULL; + gboolean nm_owned = FALSE; iface = get_virtual_iface_name (self, connection, &parent); if (!iface) { @@ -1101,6 +1102,8 @@ system_create_virtual_device (NMManager *self, NMConnection *connection) */ priv->ignore_link_added_cb++; + nm_owned = !nm_platform_link_exists (iface); + if (nm_connection_is_type (connection, NM_SETTING_BOND_SETTING_NAME)) { device = nm_device_bond_new_for_connection (connection); } else if (nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME)) { @@ -1127,8 +1130,14 @@ system_create_virtual_device (NMManager *self, NMConnection *connection) } if (device) { - nm_device_set_nm_owned (device); - add_device (self, device, FALSE); + if (nm_owned) + nm_device_set_nm_owned (device); + + /* If it was created by NM there's no connection to assume, but if it + * previously existed there might be one. + */ + add_device (self, device, !nm_owned); + g_object_unref (device); } @@ -1908,7 +1917,7 @@ factory_device_added_cb (NMDeviceFactory *factory, NMDevice *device, gpointer user_data) { - add_device (NM_MANAGER (user_data), device, FALSE); + add_device (NM_MANAGER (user_data), device, TRUE); } static gboolean diff --git a/src/settings/plugins/Makefile.am b/src/settings/plugins/Makefile.am index 41694e7e44..22f4171073 100644 --- a/src/settings/plugins/Makefile.am +++ b/src/settings/plugins/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS=keyfile example +SUBDIRS=keyfile example ibft @GNOME_CODE_COVERAGE_RULES@ diff --git a/src/settings/plugins/ibft/Makefile.am b/src/settings/plugins/ibft/Makefile.am new file mode 100644 index 0000000000..c687cf3008 --- /dev/null +++ b/src/settings/plugins/ibft/Makefile.am @@ -0,0 +1,40 @@ +SUBDIRS = . tests + +@GNOME_CODE_COVERAGE_RULES@ + +pkglib_LTLIBRARIES = libnm-settings-plugin-ibft.la + +noinst_LTLIBRARIES = libibft-io.la + +libibft_io_la_SOURCES = \ + reader.c \ + reader.h \ + errors.c \ + errors.h + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src/ \ + -I$(top_srcdir)/src/platform \ + -I$(top_srcdir)/src/settings \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/libnm-core \ + -I$(top_builddir)/libnm-core \ + -DNETWORKMANAGER_COMPILATION \ + -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \ + $(GLIB_CFLAGS) \ + $(DBUS_CFLAGS) \ + -DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \ + -DSYSCONFDIR=\"$(sysconfdir)\" \ + -DSBINDIR=\"$(sbindir)\" + +libnm_settings_plugin_ibft_la_SOURCES = \ + plugin.c \ + plugin.h \ + nm-ibft-connection.c \ + nm-ibft-connection.h + +libnm_settings_plugin_ibft_la_LDFLAGS = -module -avoid-version +libnm_settings_plugin_ibft_la_LIBADD = libibft-io.la + +CLEANFILES = $(BUILT_SOURCES) + diff --git a/src/settings/plugins/ibft/errors.c b/src/settings/plugins/ibft/errors.c new file mode 100644 index 0000000000..ead26867bb --- /dev/null +++ b/src/settings/plugins/ibft/errors.c @@ -0,0 +1,34 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#include <glib.h> +#include "errors.h" + +GQuark +ibft_plugin_error_quark (void) +{ + static GQuark error_quark = 0; + + if (G_UNLIKELY (error_quark == 0)) + error_quark = g_quark_from_static_string ("ibft-plugin-error-quark"); + return error_quark; +} + + diff --git a/src/settings/plugins/ibft/errors.h b/src/settings/plugins/ibft/errors.h new file mode 100644 index 0000000000..cb3756775b --- /dev/null +++ b/src/settings/plugins/ibft/errors.h @@ -0,0 +1,29 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#ifndef __ERRORS_H__ +#define __ERRORS_H__ + +#define IBFT_PLUGIN_ERROR (ibft_plugin_error_quark ()) +GQuark ibft_plugin_error_quark (void); + + +#endif /* __ERRORS_H__ */ + diff --git a/src/settings/plugins/ibft/nm-ibft-connection.c b/src/settings/plugins/ibft/nm-ibft-connection.c new file mode 100644 index 0000000000..2ed4679e59 --- /dev/null +++ b/src/settings/plugins/ibft/nm-ibft-connection.c @@ -0,0 +1,65 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#include <string.h> +#include <net/ethernet.h> +#include <netinet/ether.h> + +#include <glib/gstdio.h> + +#include "nm-ibft-connection.h" +#include "errors.h" +#include "reader.h" + +G_DEFINE_TYPE (NMIbftConnection, nm_ibft_connection, NM_TYPE_SETTINGS_CONNECTION) + +NMIbftConnection * +nm_ibft_connection_new (const GPtrArray *block, GError **error) +{ + NMConnection *source; + GObject *object; + + source = connection_from_block (block, error); + if (!source) + return NULL; + + object = g_object_new (NM_TYPE_IBFT_CONNECTION, NULL); + /* Update settings with what was read from iscsiadm */ + if (!nm_settings_connection_replace_settings (NM_SETTINGS_CONNECTION (object), + source, + FALSE, + error)) + g_clear_object (&object); + + return (NMIbftConnection *) object; +} + +/* GObject */ + +static void +nm_ibft_connection_init (NMIbftConnection *connection) +{ +} + +static void +nm_ibft_connection_class_init (NMIbftConnectionClass *ibft_connection_class) +{ +} + diff --git a/src/settings/plugins/ibft/nm-ibft-connection.h b/src/settings/plugins/ibft/nm-ibft-connection.h new file mode 100644 index 0000000000..4ccebc3cec --- /dev/null +++ b/src/settings/plugins/ibft/nm-ibft-connection.h @@ -0,0 +1,50 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#ifndef NM_IBFT_CONNECTION_H +#define NM_IBFT_CONNECTION_H + +G_BEGIN_DECLS + +#include <nm-settings-connection.h> + +#define NM_TYPE_IBFT_CONNECTION (nm_ibft_connection_get_type ()) +#define NM_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IBFT_CONNECTION, NMIbftConnection)) +#define NM_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IBFT_CONNECTION, NMIbftConnectionClass)) +#define NM_IS_IBFT_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_IBFT_CONNECTION)) +#define NM_IS_IBFT_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IBFT_CONNECTION)) +#define NM_IBFT_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IBFT_CONNECTION, NMIbftConnectionClass)) + +typedef struct { + NMSettingsConnection parent; +} NMIbftConnection; + +typedef struct { + NMSettingsConnectionClass parent; +} NMIbftConnectionClass; + +GType nm_ibft_connection_get_type (void); + +NMIbftConnection *nm_ibft_connection_new (const GPtrArray *block, + GError **error); + +G_END_DECLS + +#endif /* NM_IBFT_CONNECTION_H */ diff --git a/src/settings/plugins/ibft/plugin.c b/src/settings/plugins/ibft/plugin.c new file mode 100644 index 0000000000..c8f9b589d7 --- /dev/null +++ b/src/settings/plugins/ibft/plugin.c @@ -0,0 +1,211 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#include <config.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +#include <gmodule.h> +#include <glib-object.h> +#include <glib/gi18n.h> +#include <gio/gio.h> + +#include <nm-setting-connection.h> + +#include "nm-dbus-glib-types.h" +#include "nm-system-config-interface.h" +#include "nm-settings-error.h" +#include "nm-logging.h" +#include "NetworkManagerUtils.h" + +#include "plugin.h" +#include "errors.h" +#include "reader.h" +#include "nm-ibft-connection.h" + +static void system_config_interface_init (NMSystemConfigInterface *system_config_interface_class); + +G_DEFINE_TYPE_EXTENDED (SCPluginIbft, sc_plugin_ibft, G_TYPE_OBJECT, 0, + G_IMPLEMENT_INTERFACE (NM_TYPE_SYSTEM_CONFIG_INTERFACE, + system_config_interface_init)) + +#define SC_PLUGIN_IBFT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SC_TYPE_PLUGIN_IBFT, SCPluginIbftPrivate)) + + +typedef struct { + GHashTable *connections; /* uuid::connection */ + gboolean initialized; +} SCPluginIbftPrivate; + +static void +read_connections (SCPluginIbft *self) +{ + SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self); + GSList *blocks, *iter; + GError *error = NULL; + NMIbftConnection *connection; + + if (!read_ibft_blocks ("/sbin/iscsiadm", &blocks, &error)) { + nm_log_dbg (LOGD_SETTINGS, _("ibft: failed to read iscsiadm records: %s"), error->message); + g_error_free (error); + return; + } + + for (iter = blocks; iter; iter = iter->next) { + connection = nm_ibft_connection_new (iter->data, &error); + if (connection) { + nm_log_info (LOGD_SETTINGS, _("ibft: read connection '%s'"), + nm_connection_get_id (NM_CONNECTION (connection))); + g_hash_table_insert (priv->connections, + g_strdup (nm_connection_get_uuid (NM_CONNECTION (connection))), + connection); + } else { + nm_log_warn (LOGD_SETTINGS, _("ibft: failed to read iscsiadm record: %s"), error->message); + g_clear_error (&error); + } + } + + g_slist_free_full (blocks, (GDestroyNotify) g_ptr_array_unref); +} + +static GSList * +get_connections (NMSystemConfigInterface *config) +{ + SCPluginIbft *self = SC_PLUGIN_IBFT (config); + SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self); + GSList *list = NULL; + GHashTableIter iter; + NMIbftConnection *connection; + + if (!priv->initialized) { + read_connections (self); + priv->initialized = TRUE; + } + + g_hash_table_iter_init (&iter, priv->connections); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &connection)) + list = g_slist_prepend (list, connection); + + return list; +} + +static void +init (NMSystemConfigInterface *config) +{ +} + +static void +sc_plugin_ibft_init (SCPluginIbft *self) +{ + SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self); + + priv->connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); +} + +static void +dispose (GObject *object) +{ + SCPluginIbft *self = SC_PLUGIN_IBFT (object); + SCPluginIbftPrivate *priv = SC_PLUGIN_IBFT_GET_PRIVATE (self); + + if (priv->connections) { + g_hash_table_destroy (priv->connections); + priv->connections = NULL; + } + + G_OBJECT_CLASS (sc_plugin_ibft_parent_class)->dispose (object); +} + +static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + switch (prop_id) { + case NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME: + g_value_set_string (value, "iBFT"); + break; + case NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO: + g_value_set_string (value, "(c) 2014 Red Hat, Inc. To report bugs please use the NetworkManager mailing list."); + break; + case NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES: + g_value_set_uint (value, NM_SYSTEM_CONFIG_INTERFACE_CAP_NONE); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +set_property (GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec) +{ + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); +} + +static void +sc_plugin_ibft_class_init (SCPluginIbftClass *req_class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (req_class); + + g_type_class_add_private (req_class, sizeof (SCPluginIbftPrivate)); + + object_class->dispose = dispose; + object_class->get_property = get_property; + object_class->set_property = set_property; + + g_object_class_override_property (object_class, + NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME, + NM_SYSTEM_CONFIG_INTERFACE_NAME); + + g_object_class_override_property (object_class, + NM_SYSTEM_CONFIG_INTERFACE_PROP_INFO, + NM_SYSTEM_CONFIG_INTERFACE_INFO); + + g_object_class_override_property (object_class, + NM_SYSTEM_CONFIG_INTERFACE_PROP_CAPABILITIES, + NM_SYSTEM_CONFIG_INTERFACE_CAPABILITIES); + + g_object_class_override_property (object_class, + NM_SYSTEM_CONFIG_INTERFACE_PROP_HOSTNAME, + NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME); +} + +static void +system_config_interface_init (NMSystemConfigInterface *system_config_interface_class) +{ + /* interface implementation */ + system_config_interface_class->get_connections = get_connections; + system_config_interface_class->init = init; +} + +G_MODULE_EXPORT GObject * +nm_system_config_factory (void) +{ + static SCPluginIbft *singleton = NULL; + + if (!singleton) + singleton = SC_PLUGIN_IBFT (g_object_new (SC_TYPE_PLUGIN_IBFT, NULL)); + else + g_object_ref (singleton); + + return G_OBJECT (singleton); +} diff --git a/src/settings/plugins/ibft/plugin.h b/src/settings/plugins/ibft/plugin.h new file mode 100644 index 0000000000..2c811359e4 --- /dev/null +++ b/src/settings/plugins/ibft/plugin.h @@ -0,0 +1,47 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#ifndef _PLUGIN_H_ +#define _PLUGIN_H_ + +#include <glib-object.h> + +#define SC_TYPE_PLUGIN_IBFT (sc_plugin_ibft_get_type ()) +#define SC_PLUGIN_IBFT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SC_TYPE_PLUGIN_IBFT, SCPluginIbft)) +#define SC_PLUGIN_IBFT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SC_TYPE_PLUGIN_IBFT, SCPluginIbftClass)) +#define SC_IS_PLUGIN_IBFT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SC_TYPE_PLUGIN_IBFT)) +#define SC_IS_PLUGIN_IBFT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SC_TYPE_PLUGIN_IBFT)) +#define SC_PLUGIN_IBFT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SC_TYPE_PLUGIN_IBFT, SCPluginIbftClass)) + +typedef struct _SCPluginIbft SCPluginIbft; +typedef struct _SCPluginIbftClass SCPluginIbftClass; + +struct _SCPluginIbft { + GObject parent; +}; + +struct _SCPluginIbftClass { + GObjectClass parent; +}; + +GType sc_plugin_ibft_get_type (void); + +#endif /* _PLUGIN_H_ */ + diff --git a/src/settings/plugins/ibft/reader.c b/src/settings/plugins/ibft/reader.c new file mode 100644 index 0000000000..908ba69016 --- /dev/null +++ b/src/settings/plugins/ibft/reader.c @@ -0,0 +1,565 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#include <config.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> +#include <sys/wait.h> +#include <sys/inotify.h> +#include <errno.h> +#include <sys/ioctl.h> +#include <unistd.h> + +#include <glib.h> +#include <glib/gi18n.h> +#include <nm-connection.h> +#include <nm-setting-connection.h> +#include <nm-setting-ip4-config.h> +#include <nm-setting-ip6-config.h> +#include <nm-setting-vlan.h> +#include <nm-setting-wired.h> +#include <nm-utils.h> + +#include "nm-platform.h" +#include "nm-posix-signals.h" +#include "NetworkManagerUtils.h" +#include "nm-logging.h" + +#include "errors.h" +#include "reader.h" + +#define PARSE_WARNING(msg...) nm_log_warn (LOGD_SETTINGS, " " msg) + +static void +iscsiadm_child_setup (gpointer user_data G_GNUC_UNUSED) +{ + /* We are in the child process here; set a different process group to + * ensure signal isolation between child and parent. + */ + pid_t pid = getpid (); + setpgid (pid, pid); + + /* + * We blocked signals in main(). We need to restore original signal + * mask for iscsiadm here so that it can receive signals. + */ + nm_unblock_posix_signals (NULL); +} + +/* Removes trailing whitespace and whitespace before and immediately after the '=' */ +static char * +remove_most_whitespace (const char *src) +{ + char *s_new, *s2; + const char *svalue; + + while (*src && g_ascii_isspace (*src)) + src++; + + svalue = strchr (src, '='); + if (!svalue || svalue == src) + return NULL; + + s_new = g_new (char, strlen (src) + 1); + + memcpy (s_new, src, svalue - src); + s_new[svalue - src] = '\0'; + g_strchomp (s_new); + + svalue++; + while (*svalue && g_ascii_isspace (*svalue)) + svalue++; + + s2 = strchr (s_new, '\0'); + s2[0] = '='; + strcpy (++s2, svalue); + g_strchomp (s2); + + return s_new; +} + +#define TAG_BEGIN "# BEGIN RECORD" +#define TAG_END "# END RECORD" + +/** + * read_ibft_blocks: + * @iscsiadm_path: path to iscsiadm program + * @out_blocks: on return if successful, a #GSList of #GPtrArray, or %NULL on + * failure + * @error: location for an error on failure + * + * Parses iscsiadm output and returns a #GSList of #GPtrArray in the @out_blocks + * argument on success, otherwise @out_blocks is set to %NULL. Each #GPtrArray + * in @out_blocks contains the lines from an iscsiadm interface block. + * + * Returns: %TRUE on success, %FALSE on errors + */ +gboolean +read_ibft_blocks (const char *iscsiadm_path, + GSList **out_blocks, + GError **error) +{ + const char *argv[4] = { iscsiadm_path, "-m", "fw", NULL }; + const char *envp[1] = { NULL }; + GSList *blocks = NULL; + char *out = NULL, *err = NULL; + gint status = 0; + char **lines = NULL, **iter; + GPtrArray *block_lines = NULL; + gboolean success = FALSE; + + g_return_val_if_fail (iscsiadm_path != NULL, FALSE); + g_return_val_if_fail (out_blocks != NULL && *out_blocks == NULL, FALSE); + + if (!g_spawn_sync ("/", (char **) argv, (char **) envp, 0, + iscsiadm_child_setup, NULL, &out, &err, &status, error)) + goto done; + + if (!WIFEXITED (status)) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: %s exited abnormally.", iscsiadm_path); + goto done; + } + + if (WEXITSTATUS (status) != 0) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: %s exited with error %d. Message: '%s'", + iscsiadm_path, WEXITSTATUS (status), err ? err : "(none)"); + goto done; + } + + nm_log_dbg (LOGD_SETTINGS, "iBFT records:\n%s", out); + + lines = g_strsplit_set (out, "\n\r", -1); + for (iter = lines; iter && *iter; iter++) { + if (!*iter[0]) + continue; + + if (!g_ascii_strncasecmp (*iter, TAG_BEGIN, STRLEN (TAG_BEGIN))) { + if (block_lines) { + PARSE_WARNING ("malformed iscsiadm record: missing END RECORD."); + g_ptr_array_unref (block_lines); + } + /* Start new record */ + block_lines = g_ptr_array_new_full (15, g_free); + } else if (!g_ascii_strncasecmp (*iter, TAG_END, STRLEN (TAG_END))) { + if (block_lines) { + if (block_lines->len) + blocks = g_slist_prepend (blocks, block_lines); + else + g_ptr_array_unref (block_lines); + block_lines = NULL; + } + } else if (block_lines) { + char *s = remove_most_whitespace (*iter); + + if (s) + g_ptr_array_add (block_lines, s); + else { + PARSE_WARNING ("malformed iscsiadm record: no = in '%s'.", *iter); + g_clear_pointer (&block_lines, g_ptr_array_unref); + } + } + } + + if (block_lines) { + PARSE_WARNING ("malformed iscsiadm record: missing # END RECORD."); + g_clear_pointer (&block_lines, g_ptr_array_unref); + } + success = TRUE; + +done: + if (lines) + g_strfreev (lines); + g_free (out); + if (success) + *out_blocks = blocks; + else + g_slist_free_full (blocks, (GDestroyNotify) g_ptr_array_unref); + return success; +} + +#define ISCSI_HWADDR_TAG "iface.hwaddress" +#define ISCSI_BOOTPROTO_TAG "iface.bootproto" +#define ISCSI_IPADDR_TAG "iface.ipaddress" +#define ISCSI_SUBNET_TAG "iface.subnet_mask" +#define ISCSI_GATEWAY_TAG "iface.gateway" +#define ISCSI_DNS1_TAG "iface.primary_dns" +#define ISCSI_DNS2_TAG "iface.secondary_dns" +#define ISCSI_VLAN_ID_TAG "iface.vlan_id" +#define ISCSI_IFACE_TAG "iface.net_ifacename" + +static const char * +match_iscsiadm_tag (const char *line, const char *tag) +{ + gsize taglen = strlen (tag); + + if (g_ascii_strncasecmp (line, tag, taglen) != 0) + return NULL; + if (line[taglen] != '=') + return NULL; + return line + taglen + 1; +} + +/** + * parse_ibft_config: + * @data: an array of iscsiadm interface block lines + * @error: return location for errors + * @...: pairs of key (const char *) : location (const char **) indicating the + * key to look for and the location to store the retrieved value in + * + * Parses an iscsiadm interface block into variables requested by the caller. + * Callers should verify the returned data is complete and valid. Returned + * strings are owned by @data and should not be used after @data is freed. + * + * Returns: %TRUE if at least , %FALSE on failure + */ +gboolean +parse_ibft_config (const GPtrArray *data, GError **error, ...) +{ + gboolean success = FALSE; + const char **out_value, *p; + va_list ap; + const char *key; + guint i; + + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (data->len > 0, FALSE); + + /* Find requested keys and populate return values */ + va_start (ap, error); + while ((key = va_arg (ap, const char *))) { + out_value = va_arg (ap, const char **); + *out_value = NULL; + for (i = 0; i < data->len; i++) { + p = match_iscsiadm_tag (g_ptr_array_index (data, i), key); + if (p) { + *out_value = p; + success = TRUE; + break; + } + } + } + va_end (ap); + + if (!success) { + g_set_error_literal (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: failed to match at least one iscsiadm block field"); + } + return success; +} + +static gboolean +ip4_setting_add_from_block (const GPtrArray *block, + NMConnection *connection, + GError **error) +{ + NMSettingIP4Config *s_ip4 = NULL; + NMIP4Address *addr; + const char *s_method = NULL; + const char *s_ipaddr = NULL; + const char *s_gateway = NULL; + const char *s_dns1 = NULL; + const char *s_dns2 = NULL; + const char *s_netmask = NULL; + guint32 ipaddr = 0; + guint32 netmask = 0; + guint32 gateway = 0; + guint32 dns1 = 0; + guint32 dns2 = 0; + guint32 prefix; + + g_assert (block); + + if (!parse_ibft_config (block, error, + ISCSI_BOOTPROTO_TAG, &s_method, + ISCSI_IPADDR_TAG, &s_ipaddr, + ISCSI_SUBNET_TAG, &s_netmask, + ISCSI_GATEWAY_TAG, &s_gateway, + ISCSI_DNS1_TAG, &s_dns1, + ISCSI_DNS2_TAG, &s_dns2, + NULL)) + goto error; + + if (!s_method) { + g_set_error_literal (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: missing " ISCSI_BOOTPROTO_TAG); + goto error; + } + + s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); + + if (!g_ascii_strcasecmp (s_method, "dhcp")) { + g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); + goto success; + } else if (g_ascii_strcasecmp (s_method, "static") != 0) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: unknown " ISCSI_BOOTPROTO_TAG " '%s'.", + s_method); + goto error; + } + + /* Static configuration stuff */ + g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL); + + /* IP address */ + if (!s_ipaddr || inet_pton (AF_INET, s_ipaddr, &ipaddr) != 1) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: invalid IP address '%s'.", + s_ipaddr); + goto error; + } + + /* Subnet/prefix */ + if (!s_netmask || inet_pton (AF_INET, s_netmask, &netmask) != 1) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: invalid subnet mask '%s'.", + s_netmask); + goto error; + } + prefix = nm_utils_ip4_netmask_to_prefix (netmask); + + if (s_gateway && inet_pton (AF_INET, s_gateway, &gateway) != 1) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: invalid IP gateway '%s'.", + s_gateway); + goto error; + } + + if (s_dns1 && inet_pton (AF_INET, s_dns1, &dns1) != 1) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: invalid DNS1 address '%s'.", + s_dns1); + goto error; + } + + if (s_dns2 && inet_pton (AF_INET, s_dns2, &dns2) != 1) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: invalid DNS2 address '%s'.", + s_dns2); + goto error; + } + + addr = nm_ip4_address_new (); + nm_ip4_address_set_address (addr, ipaddr); + nm_ip4_address_set_prefix (addr, prefix); + nm_ip4_address_set_gateway (addr, gateway); + nm_setting_ip4_config_add_address (s_ip4, addr); + nm_ip4_address_unref (addr); + + if (dns1) + nm_setting_ip4_config_add_dns (s_ip4, dns1); + if (dns2) + nm_setting_ip4_config_add_dns (s_ip4, dns2); + +success: + nm_connection_add_setting (connection, NM_SETTING (s_ip4)); + return TRUE; + +error: + g_clear_object (&s_ip4); + return FALSE; +} + +static gboolean +connection_setting_add (const GPtrArray *block, + NMConnection *connection, + const char *type, + const char *prefix, + const char *iface, + GError **error) +{ + NMSetting *s_con; + char *id, *uuid, *uuid_data; + const char *s_hwaddr = NULL, *s_ip4addr = NULL, *s_vlanid; + + if (!parse_ibft_config (block, error, + ISCSI_VLAN_ID_TAG, &s_vlanid, + ISCSI_HWADDR_TAG, &s_hwaddr, + ISCSI_IPADDR_TAG, &s_ip4addr, + NULL)) + return FALSE; + if (!s_hwaddr) { + g_set_error_literal (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: missing " ISCSI_HWADDR_TAG); + return FALSE; + } + + id = g_strdup_printf ("iBFT%s%s %s", + prefix ? " " : "", + prefix ? prefix : "", + iface); + + uuid_data = g_strdup_printf ("%s%s%s", + s_vlanid ? s_vlanid : "0", + s_hwaddr, + s_ip4addr ? s_ip4addr : "DHCP"); + uuid = nm_utils_uuid_generate_from_string (uuid_data); + g_free (uuid_data); + + s_con = nm_setting_connection_new (); + g_object_set (s_con, + NM_SETTING_CONNECTION_TYPE, type, + NM_SETTING_CONNECTION_UUID, uuid, + NM_SETTING_CONNECTION_ID, id, + NM_SETTING_CONNECTION_READ_ONLY, TRUE, + NULL); + + g_free (uuid); + g_free (id); + + nm_connection_add_setting (connection, NM_SETTING (s_con)); + return TRUE; +} + +static gboolean +is_ibft_vlan_device (const GPtrArray *block) +{ + char *s_vlan_id = NULL; + + if (parse_ibft_config (block, NULL, ISCSI_VLAN_ID_TAG, &s_vlan_id, NULL)) { + g_assert (s_vlan_id); + + /* VLAN 0 is normally a valid VLAN ID, but in the iBFT case it + * means "no VLAN". + */ + if (nm_utils_ascii_str_to_int64 (s_vlan_id, 10, 1, 4095, -1) != -1) + return TRUE; + } + return FALSE; +} + +static gboolean +vlan_setting_add_from_block (const GPtrArray *block, + NMConnection *connection, + GError **error) +{ + NMSetting *s_vlan = NULL; + const char *vlan_id_str = NULL; + gint64 vlan_id = -1; + gboolean success; + + g_assert (block); + g_assert (connection); + + /* This won't fail since this function shouldn't be called unless the + * iBFT VLAN ID exists and is > 0. + */ + success = parse_ibft_config (block, NULL, ISCSI_VLAN_ID_TAG, &vlan_id_str, NULL); + g_assert (success); + g_assert (vlan_id_str); + + /* VLAN 0 is normally a valid VLAN ID, but in the iBFT case it means "no VLAN" */ + vlan_id = nm_utils_ascii_str_to_int64 (vlan_id_str, 10, 1, 4095, -1); + if (vlan_id == -1) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, "Invalid VLAN_ID '%s'", vlan_id_str); + return FALSE; + } + + s_vlan = nm_setting_vlan_new (); + g_object_set (s_vlan, NM_SETTING_VLAN_ID, (guint32) vlan_id, NULL); + nm_connection_add_setting (connection, NM_SETTING (s_vlan)); + + return TRUE; +} + +static gboolean +wired_setting_add_from_block (const GPtrArray *block, + NMConnection *connection, + GError **error) +{ + NMSetting *s_wired = NULL; + const char *hwaddr_str = NULL; + GByteArray *hwaddr; + + g_assert (block); + g_assert (connection); + + if (!parse_ibft_config (block, NULL, ISCSI_HWADDR_TAG, &hwaddr_str, NULL)) { + g_set_error_literal (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: missing " ISCSI_HWADDR_TAG); + return FALSE; + } + + hwaddr = nm_utils_hwaddr_atoba (hwaddr_str, ETH_ALEN); + if (!hwaddr) { + g_set_error (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: invalid " ISCSI_HWADDR_TAG " '%s'.", + hwaddr_str); + return FALSE; + } + + s_wired = nm_setting_wired_new (); + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, hwaddr, NULL); + g_byte_array_unref (hwaddr); + + nm_connection_add_setting (connection, s_wired); + return TRUE; +} + +NMConnection * +connection_from_block (const GPtrArray *block, GError **error) +{ + NMConnection *connection = NULL; + gboolean is_vlan = FALSE; + const char *iface = NULL; + + g_assert (block); + + if (!parse_ibft_config (block, error, ISCSI_IFACE_TAG, &iface, NULL)) { + g_set_error_literal (error, IBFT_PLUGIN_ERROR, 0, + "iBFT: malformed iscsiadm record: missing " ISCSI_IFACE_TAG); + return NULL; + } + + connection = nm_simple_connection_new (); + + is_vlan = is_ibft_vlan_device (block); + if (is_vlan && !vlan_setting_add_from_block (block, connection, error)) + goto error; + + /* Always have a wired setting; for VLAN it defines the parent */ + if (!wired_setting_add_from_block (block, connection, error)) + goto error; + + if (!ip4_setting_add_from_block (block, connection, error)) + goto error; + + if (!connection_setting_add (block, + connection, + is_vlan ? NM_SETTING_VLAN_SETTING_NAME : NM_SETTING_WIRED_SETTING_NAME, + is_vlan ? "VLAN" : NULL, + iface, + error)) + goto error; + + if (!nm_connection_normalize (connection, NULL, NULL, error)) + goto error; + + return connection; + +error: + g_object_unref (connection); + return NULL; +} + diff --git a/src/settings/plugins/ibft/reader.h b/src/settings/plugins/ibft/reader.h new file mode 100644 index 0000000000..0b2f22b659 --- /dev/null +++ b/src/settings/plugins/ibft/reader.h @@ -0,0 +1,36 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#ifndef __READER_H__ +#define __READER_H__ + +#include <glib.h> +#include <nm-connection.h> + +gboolean read_ibft_blocks (const char *iscsiadm_path, + GSList **out_blocks, + GError **error); + +NMConnection *connection_from_block (const GPtrArray *block, GError **error); + +/* For testcases */ +gboolean parse_ibft_config (const GPtrArray *data, GError **error, ...) G_GNUC_NULL_TERMINATED; + +#endif /* __READER_H__ */ diff --git a/src/settings/plugins/ibft/tests/Makefile.am b/src/settings/plugins/ibft/tests/Makefile.am new file mode 100644 index 0000000000..62011759fa --- /dev/null +++ b/src/settings/plugins/ibft/tests/Makefile.am @@ -0,0 +1,50 @@ +if ENABLE_TESTS + +@GNOME_CODE_COVERAGE_RULES@ + +AM_CPPFLAGS = \ + $(GLIB_CFLAGS) \ + $(CODE_COVERAGE_CFLAGS) \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/libnm-core \ + -I$(top_builddir)/libnm-core \ + -I$(top_srcdir)/src/ \ + -I$(top_srcdir)/src/platform \ + -I$(top_srcdir)/src/settings \ + -I$(srcdir)/../ \ + -DG_LOG_DOMAIN=\""NetworkManager-ibft"\" \ + -DNETWORKMANAGER_COMPILATION \ + -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \ + -DTEST_IBFT_DIR=\"$(abs_srcdir)\" \ + -DTEST_SCRATCH_DIR=\"$(abs_builddir)/\" + +AM_LDFLAGS = \ + $(GLIB_LIBS) \ + $(DBUS_LIBS) \ + $(CODE_COVERAGE_LDFLAGS) + +noinst_PROGRAMS = test-ibft + +test_ibft_SOURCES = \ + test-ibft.c \ + ../errors.c \ + ../reader.c + +test_ibft_LDADD = \ + $(top_builddir)/src/libNetworkManager.la + +TESTS = test-ibft + +EXTRA_DIST = \ + iscsiadm-test-dhcp \ + iscsiadm-test-static \ + iscsiadm-test-bad-ipaddr \ + iscsiadm-test-bad-gateway \ + iscsiadm-test-bad-dns1 \ + iscsiadm-test-bad-dns2 \ + iscsiadm-test-bad-entry \ + iscsiadm-test-bad-record \ + iscsiadm-test-vlan + +endif + diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns1 b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns1 index 4a6a93822e..54f02da63a 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns1 +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns1 @@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0 iface.gateway = 192.168.35.254 iface.primary_dns = 10000.500.250.1 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns2 b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns2 index 9bd5839bd3..ebd7a9caae 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-dns2 +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-dns2 @@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0 iface.gateway = 192.168.35.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = blah.foo.bar.baz -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ibft/tests/iscsiadm-test-bad-entry b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-entry new file mode 100755 index 0000000000..4e326048e9 --- /dev/null +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-entry @@ -0,0 +1,20 @@ +#!/bin/bash + +cat << EOF +# BEGIN RECORD +iface.initiatorname = iqn.pjones6 +iface.hwaddress = 00:33:21:98:b9:f0 +iface.bootproto = STATIC +iface.ipaddress 192.168.32.72 +iface.subnet_mask = 255.255.252.0 +iface.gateway = 192.168.35.254 +iface.primary_dns = 10.16.255.2 +iface.secondary_dns = 10.16.255.3 +iface.vlan_id = 0 +iface.net_ifacename = eth0 +node.name = iqn.0.2008-11.com.blahblah:iscsi0 +node.conn[0].address = 10.16.52.16 +node.conn[0].port = 3260 +node.boot_lun = 00000000 +# END RECORD + diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-ipaddr b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-gateway index 92f44777b4..5390a6c3db 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-ipaddr +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-gateway @@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0 iface.gateway = bb.cc.dd.ee iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-gateway b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-ipaddr index b3dc74478b..b41cd1f165 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-gateway +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-ipaddr @@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0 iface.gateway = 192.168.35.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-record b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-record index a2d215fe24..22b34e6f52 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-record +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-bad-record @@ -8,7 +8,7 @@ iface.bootproto = DHCP iface.gateway = 10.16.52.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-dhcp b/src/settings/plugins/ibft/tests/iscsiadm-test-dhcp index 6de0637cb1..556b0586e3 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-dhcp +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-dhcp @@ -8,7 +8,7 @@ iface.bootproto = DHCP iface.gateway = 10.16.52.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 @@ -22,7 +22,7 @@ iface.bootproto = DHCP iface.gateway = 10.16.52.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth1 node.name = iqn.1.2008-11.com.blahblah:iscsi1 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-static b/src/settings/plugins/ibft/tests/iscsiadm-test-static index 99a6e7c173..51711480e9 100755 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-static +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-static @@ -10,7 +10,7 @@ iface.subnet_mask = 255.255.252.0 iface.gateway = 192.168.35.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth0 node.name = iqn.0.2008-11.com.blahblah:iscsi0 node.conn[0].address = 10.16.52.16 @@ -24,7 +24,7 @@ iface.bootproto = DHCP iface.gateway = 10.16.52.254 iface.primary_dns = 10.16.255.2 iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 +iface.vlan_id = 0 iface.net_ifacename = eth1 node.name = iqn.1.2008-11.com.blahblah:iscsi1 node.conn[0].address = 10.16.52.16 diff --git a/src/settings/plugins/ibft/tests/iscsiadm-test-vlan b/src/settings/plugins/ibft/tests/iscsiadm-test-vlan new file mode 100755 index 0000000000..59b80bd03d --- /dev/null +++ b/src/settings/plugins/ibft/tests/iscsiadm-test-vlan @@ -0,0 +1,19 @@ +#!/bin/bash + +cat << EOF +# BEGIN RECORD 6.2.0.873-21 +iface.initiatorname = iqn.2010-04.org.ipxe:d05faa97-c4be-44f6-a723-efde9aa399a0 +iface.transport_name = tcp +iface.hwaddress = 00:33:21:98:b9:f0 +iface.bootproto = STATIC +iface.ipaddress = 192.168.6.200 +iface.subnet_mask = 255.255.255.0 +iface.vlan_id = 123 +iface.net_ifacename = eth0 +node.name = iqn.2003-01.org.x:disk1 +node.conn[0].address = 192.168.6.32 +node.conn[0].port = 3260 +node.boot_lun = 01000000 +# END RECORD +EOF + diff --git a/src/settings/plugins/ibft/tests/test-ibft.c b/src/settings/plugins/ibft/tests/test-ibft.c new file mode 100644 index 0000000000..45c8d1f697 --- /dev/null +++ b/src/settings/plugins/ibft/tests/test-ibft.c @@ -0,0 +1,295 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* NetworkManager system settings service + * + * 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 2014 Red Hat, Inc. + */ + +#include <stdio.h> +#include <stdarg.h> +#include <unistd.h> +#include <string.h> +#include <netinet/ether.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <sys/socket.h> + +#include <nm-utils.h> +#include <nm-setting-connection.h> +#include <nm-setting-wired.h> +#include <nm-setting-ip4-config.h> +#include <nm-setting-vlan.h> + +#include "NetworkManagerUtils.h" + +#include "errors.h" +#include "reader.h" +#include "nm-logging.h" + +#include "nm-test-utils.h" + +static GPtrArray * +read_block (const char *iscsiadm_path, const char *expected_mac) +{ + GSList *blocks = NULL, *iter; + GPtrArray *block = NULL; + GError *error = NULL; + gboolean success; + + success = read_ibft_blocks (iscsiadm_path, &blocks, &error); + g_assert_no_error (error); + g_assert (success); + g_assert (blocks); + + for (iter = blocks; iter; iter = iter->next) { + const char *s_hwaddr = NULL; + + if (!parse_ibft_config (iter->data, NULL, "iface.hwaddress", &s_hwaddr, NULL)) + continue; + g_assert (s_hwaddr); + if (nm_utils_hwaddr_matches (s_hwaddr, -1, expected_mac, -1)) { + block = g_ptr_array_ref (iter->data); + break; + } + } + g_assert (block); + + g_slist_foreach (blocks, (GFunc) g_ptr_array_unref, NULL); + return block; +} + +static void +test_read_ibft_dhcp (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingWired *s_wired; + NMSettingIP4Config *s_ip4; + GError *error = NULL; + const GByteArray *array; + const char *expected_mac_address = "00:33:21:98:b9:f1"; + GPtrArray *block; + + block = read_block (TEST_IBFT_DIR "/iscsiadm-test-dhcp", expected_mac_address); + + connection = connection_from_block (block, &error); + g_assert_no_error (error); + nmtst_assert_connection_verifies_without_normalization (connection); + + g_assert (!nm_connection_get_setting_vlan (connection)); + + /* ===== CONNECTION SETTING ===== */ + s_con = nm_connection_get_setting_connection (connection); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME); + g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "iBFT eth1"); + g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0); + g_assert (nm_setting_connection_get_autoconnect (s_con)); + g_assert (nm_setting_connection_get_read_only (s_con)); + + /* ===== WIRED SETTING ===== */ + s_wired = nm_connection_get_setting_wired (connection); + g_assert (s_wired); + array = nm_setting_wired_get_mac_address (s_wired); + g_assert (array); + nmtst_assert_hwaddr_equals (array->data, array->len, expected_mac_address); + g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0); + + /* ===== IPv4 SETTING ===== */ + s_ip4 = nm_connection_get_setting_ip4_config (connection); + g_assert (s_ip4); + g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO); + + g_object_unref (connection); +} + +static void +test_read_ibft_static (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingWired *s_wired; + NMSettingIP4Config *s_ip4; + GError *error = NULL; + const GByteArray *array; + const char *expected_mac_address = "00:33:21:98:b9:f0"; + NMIP4Address *ip4_addr; + GPtrArray *block; + + block = read_block (TEST_IBFT_DIR "/iscsiadm-test-static", expected_mac_address); + + connection = connection_from_block (block, &error); + g_assert_no_error (error); + nmtst_assert_connection_verifies_without_normalization (connection); + + g_assert (!nm_connection_get_setting_vlan (connection)); + + /* ===== CONNECTION SETTING ===== */ + s_con = nm_connection_get_setting_connection (connection); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME); + g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "iBFT eth0"); + g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0); + g_assert (nm_setting_connection_get_autoconnect (s_con)); + g_assert (nm_setting_connection_get_read_only (s_con)); + + /* ===== WIRED SETTING ===== */ + s_wired = nm_connection_get_setting_wired (connection); + g_assert (s_wired); + array = nm_setting_wired_get_mac_address (s_wired); + g_assert (array); + nmtst_assert_hwaddr_equals (array->data, array->len, expected_mac_address); + g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0); + + /* ===== IPv4 SETTING ===== */ + s_ip4 = nm_connection_get_setting_ip4_config (connection); + g_assert (s_ip4); + g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL); + + g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2); + nmtst_assert_ip4_address_equals (nm_setting_ip4_config_get_dns (s_ip4, 0), "10.16.255.2"); + nmtst_assert_ip4_address_equals (nm_setting_ip4_config_get_dns (s_ip4, 1), "10.16.255.3"); + + g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1); + ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0); + g_assert (ip4_addr); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_address (ip4_addr), "192.168.32.72"); + g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 22); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_gateway (ip4_addr), "192.168.35.254"); + + g_object_unref (connection); + g_ptr_array_unref (block); +} + +static void +test_read_ibft_malformed (gconstpointer user_data) +{ + const char *iscsiadm_path = user_data; + GSList *blocks = NULL; + GError *error = NULL; + gboolean success; + + g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS)); + + g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*malformed iscsiadm record*"); + + success = read_ibft_blocks (iscsiadm_path, &blocks, &error); + g_assert_no_error (error); + g_assert (success); + g_assert (blocks == NULL); + + g_test_assert_expected_messages (); +} + +static void +test_read_ibft_bad_address (gconstpointer user_data) +{ + const char *iscsiadm_path = user_data; + NMConnection *connection; + const char *expected_mac_address = "00:33:21:98:b9:f0"; + GPtrArray *block; + GError *error = NULL; + + g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS)); + + block = read_block (iscsiadm_path, expected_mac_address); + + connection = connection_from_block (block, &error); + g_assert_error (error, IBFT_PLUGIN_ERROR, 0); + g_assert (strstr (error->message, "iBFT: malformed iscsiadm record: invalid")); + g_clear_error (&error); + g_assert (connection == NULL); + + g_ptr_array_unref (block); +} + +static void +test_read_ibft_vlan (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingWired *s_wired; + NMSettingVlan *s_vlan; + NMSettingIP4Config *s_ip4; + const GByteArray *array; + const char *expected_mac_address = "00:33:21:98:b9:f0"; + NMIP4Address *ip4_addr; + GError *error = NULL; + GPtrArray *block; + + block = read_block (TEST_IBFT_DIR "/iscsiadm-test-vlan", expected_mac_address); + + connection = connection_from_block (block, &error); + g_assert_no_error (error); + nmtst_assert_connection_verifies_without_normalization (connection); + + s_con = nm_connection_get_setting_connection (connection); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_VLAN_SETTING_NAME); + + /* ===== WIRED SETTING ===== */ + s_wired = nm_connection_get_setting_wired (connection); + g_assert (s_wired); + array = nm_setting_wired_get_mac_address (s_wired); + g_assert (array); + nmtst_assert_hwaddr_equals (array->data, array->len, expected_mac_address); + + /* ===== VLAN SETTING ===== */ + s_vlan = nm_connection_get_setting_vlan (connection); + g_assert (s_vlan); + g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 123); + g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, NULL); + g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, NULL); + + /* ===== IPv4 SETTING ===== */ + s_ip4 = nm_connection_get_setting_ip4_config (connection); + g_assert (s_ip4); + g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL); + + g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 0); + + g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1); + ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0); + g_assert (ip4_addr); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_address (ip4_addr), "192.168.6.200"); + g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_gateway (ip4_addr), "0.0.0.0"); + + g_object_unref (connection); + g_ptr_array_ref (block); +} + +NMTST_DEFINE (); + +#define TPATH "/settings/plugins/ibft/" + +int main (int argc, char **argv) +{ + nmtst_init_assert_logging (&argc, &argv); + + g_test_add_func (TPATH "ibft/dhcp", test_read_ibft_dhcp); + g_test_add_func (TPATH "ibft/static", test_read_ibft_static); + g_test_add_func (TPATH "ibft/vlan", test_read_ibft_vlan); + g_test_add_data_func (TPATH "ibft/bad-record-read", TEST_IBFT_DIR "/iscsiadm-test-bad-record", test_read_ibft_malformed); + g_test_add_data_func (TPATH "ibft/bad-entry-read", TEST_IBFT_DIR "/iscsiadm-test-bad-entry", test_read_ibft_malformed); + g_test_add_data_func (TPATH "ibft/bad-ipaddr-read", TEST_IBFT_DIR "/iscsiadm-test-bad-ipaddr", test_read_ibft_bad_address); + g_test_add_data_func (TPATH "ibft/bad-gateway-read", TEST_IBFT_DIR "/iscsiadm-test-bad-gateway", test_read_ibft_bad_address); + g_test_add_data_func (TPATH "ibft/bad-dns1-read", TEST_IBFT_DIR "/iscsiadm-test-bad-dns1", test_read_ibft_bad_address); + g_test_add_data_func (TPATH "ibft/bad-dns2-read", TEST_IBFT_DIR "/iscsiadm-test-bad-dns2", test_read_ibft_bad_address); + + return g_test_run (); +} + diff --git a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c index 463600959a..c933ed8484 100644 --- a/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c +++ b/src/settings/plugins/ifcfg-rh/nm-ifcfg-connection.c @@ -117,7 +117,7 @@ nm_ifcfg_connection_new (NMConnection *source, else { char *keyfile = NULL, *routefile = NULL, *route6file = NULL; - tmp = connection_from_file (full_path, NULL, NULL, NULL, + tmp = connection_from_file (full_path, NULL, NULL, &unhandled_spec, &keyfile, &routefile, @@ -269,7 +269,7 @@ commit_changes (NMSettingsConnection *connection, * it if it's really changed. */ if (priv->path) { - reread = connection_from_file (priv->path, NULL, NULL, NULL, + reread = connection_from_file (priv->path, NULL, NULL, NULL, NULL, NULL, NULL, &error, NULL); g_clear_error (&error); diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index e95bcb4226..27e2df9b7e 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -274,251 +274,6 @@ read_mac_address (shvarFile *ifcfg, const char *key, gsize len, return TRUE; } -static void -iscsiadm_child_setup (gpointer user_data G_GNUC_UNUSED) -{ - /* We are in the child process here; set a different process group to - * ensure signal isolation between child and parent. - */ - pid_t pid = getpid (); - setpgid (pid, pid); - - /* - * We blocked signals in main(). We need to restore original signal - * mask for iscsiadm here so that it can receive signals. - */ - nm_unblock_posix_signals (NULL); -} - -static char * -match_iscsiadm_tag (const char *line, const char *tag, gboolean *skip) -{ - char *p; - - if (g_ascii_strncasecmp (line, tag, strlen (tag))) - return NULL; - - p = strchr (line, '='); - if (!p) { - PARSE_WARNING ("malformed iscsiadm record: no = in '%s'.", line); - *skip = TRUE; - return NULL; - } - - p++; /* advance past = */ - return g_strstrip (p); -} - -#define ISCSI_HWADDR_TAG "iface.hwaddress" -#define ISCSI_BOOTPROTO_TAG "iface.bootproto" -#define ISCSI_IPADDR_TAG "iface.ipaddress" -#define ISCSI_SUBNET_TAG "iface.subnet_mask" -#define ISCSI_GATEWAY_TAG "iface.gateway" -#define ISCSI_DNS1_TAG "iface.primary_dns" -#define ISCSI_DNS2_TAG "iface.secondary_dns" - -static gboolean -fill_ip4_setting_from_ibft (shvarFile *ifcfg, - NMSettingIP4Config *s_ip4, - const char *iscsiadm_path, - GError **error) -{ - const char *argv[4] = { iscsiadm_path, "-m", "fw", NULL }; - const char *envp[1] = { NULL }; - gboolean success = FALSE, in_record = FALSE, hwaddr_matched = FALSE, skip = FALSE; - char *out = NULL, *err = NULL; - gint status = 0; - GByteArray *ifcfg_mac = NULL; - char **lines = NULL, **iter; - const char *method = NULL; - guint32 ipaddr; - guint32 gateway; - guint32 dns1; - guint32 dns2; - guint32 prefix = 0; - - g_return_val_if_fail (s_ip4 != NULL, FALSE); - g_return_val_if_fail (iscsiadm_path != NULL, FALSE); - - if (!g_spawn_sync ("/", (char **) argv, (char **) envp, 0, - iscsiadm_child_setup, NULL, &out, &err, &status, error)) - return FALSE; - - if (!WIFEXITED (status)) { - g_set_error (error, IFCFG_PLUGIN_ERROR, 0, - "%s exited abnormally.", iscsiadm_path); - goto done; - } - - if (WEXITSTATUS (status) != 0) { - g_set_error (error, IFCFG_PLUGIN_ERROR, 0, - "%s exited with error %d. Message: '%s'", - iscsiadm_path, WEXITSTATUS (status), err ? err : "(none)"); - goto done; - } - - if (!read_mac_address (ifcfg, "HWADDR", ETH_ALEN, &ifcfg_mac, error)) - goto done; - /* Ensure we got a MAC */ - if (!ifcfg_mac) { - g_set_error (error, IFCFG_PLUGIN_ERROR, 0, - "Missing device MAC address (no HWADDR tag present)."); - goto done; - } - - memset (&ipaddr, 0, sizeof (ipaddr)); - memset (&gateway, 0, sizeof (gateway)); - memset (&dns1, 0, sizeof (dns1)); - memset (&dns2, 0, sizeof (dns2)); - - /* Success, lets parse the output */ - lines = g_strsplit_set (out, "\n\r", -1); - for (iter = lines; iter && *iter; iter++) { - char *p; - - if (!g_ascii_strcasecmp (*iter, "# BEGIN RECORD")) { - if (in_record) { - PARSE_WARNING ("malformed iscsiadm record: already parsing record."); - skip = TRUE; - } - } else if (!g_ascii_strcasecmp (*iter, "# END RECORD")) { - if (!skip && hwaddr_matched) { - /* Record is good; fill IP4 config with its info */ - if (!method) { - PARSE_WARNING ("malformed iscsiadm record: missing BOOTPROTO."); - goto done; - } - - g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, method, NULL); - - if (!strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) { - NMIP4Address *addr; - - if (!ipaddr || !prefix) { - PARSE_WARNING ("malformed iscsiadm record: BOOTPROTO=static " - "but missing IP address or prefix."); - goto done; - } - - addr = nm_ip4_address_new (); - nm_ip4_address_set_address (addr, ipaddr); - nm_ip4_address_set_prefix (addr, prefix); - nm_ip4_address_set_gateway (addr, gateway); - nm_setting_ip4_config_add_address (s_ip4, addr); - nm_ip4_address_unref (addr); - - if (dns1) - nm_setting_ip4_config_add_dns (s_ip4, dns1); - if (dns2) - nm_setting_ip4_config_add_dns (s_ip4, dns2); - - // FIXME: DNS search domains? - } - success = TRUE; - goto done; - } - skip = FALSE; - hwaddr_matched = FALSE; - memset (&ipaddr, 0, sizeof (ipaddr)); - memset (&gateway, 0, sizeof (gateway)); - memset (&dns1, 0, sizeof (dns1)); - memset (&dns2, 0, sizeof (dns2)); - prefix = 0; - method = NULL; - } - - if (skip) - continue; - - /* HWADDR */ - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_HWADDR_TAG, &skip))) { - guint8 *ibft_mac[ETH_ALEN]; - - if (!nm_utils_hwaddr_aton (p, ibft_mac, ETH_ALEN)) { - PARSE_WARNING ("malformed iscsiadm record: invalid hwaddress."); - skip = TRUE; - continue; - } - - if (!nm_utils_hwaddr_matches (ibft_mac, ETH_ALEN, ifcfg_mac->data, ifcfg_mac->len)) { - /* This record isn't for the current device, ignore it */ - skip = TRUE; - continue; - } - - /* Success, this record is for this device */ - hwaddr_matched = TRUE; - } - - /* BOOTPROTO */ - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_BOOTPROTO_TAG, &skip))) { - if (!g_ascii_strcasecmp (p, "dhcp")) - method = NM_SETTING_IP4_CONFIG_METHOD_AUTO; - else if (!g_ascii_strcasecmp (p, "static")) - method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL; - else { - PARSE_WARNING ("malformed iscsiadm record: unknown BOOTPROTO '%s'.", p); - skip = TRUE; - continue; - } - } - - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_IPADDR_TAG, &skip))) { - if (inet_pton (AF_INET, p, &ipaddr) < 1) { - PARSE_WARNING ("malformed iscsiadm record: invalid IP address '%s'.", p); - skip = TRUE; - continue; - } - } - - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_SUBNET_TAG, &skip))) { - guint32 mask; - - if (inet_pton (AF_INET, p, &mask) < 1) { - PARSE_WARNING ("malformed iscsiadm record: invalid subnet mask '%s'.", p); - skip = TRUE; - continue; - } - - prefix = nm_utils_ip4_netmask_to_prefix (mask); - } - - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_GATEWAY_TAG, &skip))) { - if (inet_pton (AF_INET, p, &gateway) < 1) { - PARSE_WARNING ("malformed iscsiadm record: invalid IP gateway '%s'.", p); - skip = TRUE; - continue; - } - } - - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_DNS1_TAG, &skip))) { - if (inet_pton (AF_INET, p, &dns1) < 1) { - PARSE_WARNING ("malformed iscsiadm record: invalid DNS1 address '%s'.", p); - skip = TRUE; - continue; - } - } - - if (!skip && (p = match_iscsiadm_tag (*iter, ISCSI_DNS2_TAG, &skip))) { - if (inet_pton (AF_INET, p, &dns2) < 1) { - PARSE_WARNING ("malformed iscsiadm record: invalid DNS2 address '%s'.", p); - skip = TRUE; - continue; - } - } - } - - success = TRUE; - -done: - if (ifcfg_mac) - g_byte_array_free (ifcfg_mac, TRUE); - g_strfreev (lines); - g_free (out); - g_free (err); - return success; -} - /* Returns TRUE on missing address or valid address */ static gboolean read_ip4_address (shvarFile *ifcfg, @@ -1242,7 +997,6 @@ error: static NMSetting * make_ip4_setting (shvarFile *ifcfg, const char *network_file, - const char *iscsiadm_path, GError **error) { NMSettingIP4Config *s_ip4 = NULL; @@ -1294,16 +1048,6 @@ make_ip4_setting (shvarFile *ifcfg, method = NM_SETTING_IP4_CONFIG_METHOD_AUTO; } else if (!g_ascii_strcasecmp (value, "static")) { method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL; - } else if (!g_ascii_strcasecmp (value, "ibft")) { - g_free (value); - g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, never_default, NULL); - /* iSCSI Boot Firmware Table: need to read values from the iSCSI - * firmware for this device and create the IP4 setting using those. - */ - if (fill_ip4_setting_from_ibft (ifcfg, s_ip4, iscsiadm_path, error)) - return NM_SETTING (s_ip4); - g_object_unref (s_ip4); - return NULL; } else if (!g_ascii_strcasecmp (value, "autoip")) { g_free (value); g_object_set (s_ip4, @@ -1600,7 +1344,6 @@ read_aliases (NMSettingIP4Config *s_ip4, const char *filename, const char *netwo static NMSetting * make_ip6_setting (shvarFile *ifcfg, const char *network_file, - const char *iscsiadm_path, GError **error) { NMSettingIP6Config *s_ip6 = NULL; @@ -4724,7 +4467,6 @@ static NMSetting * make_vlan_setting (shvarFile *ifcfg, const char *file, char **out_master, - NMSetting8021x **s_8021x, GError **error) { NMSettingVlan *s_vlan = NULL; @@ -4866,7 +4608,7 @@ vlan_connection_from_ifcfg (const char *file, } nm_connection_add_setting (connection, con_setting); - vlan_setting = make_vlan_setting (ifcfg, file, &master, &s_8021x, error); + vlan_setting = make_vlan_setting (ifcfg, file, &master, error); if (!vlan_setting) { g_object_unref (connection); return NULL; @@ -5006,7 +4748,6 @@ NMConnection * connection_from_file (const char *filename, const char *network_file, /* for unit tests only */ const char *test_type, /* for unit tests only */ - const char *iscsiadm_path, /* for unit tests only */ char **out_unhandled, char **out_keyfile, char **out_routefile, @@ -5034,9 +4775,6 @@ connection_from_file (const char *filename, if (!network_file) network_file = SYSCONFDIR "/sysconfig/network"; - if (!iscsiadm_path) - iscsiadm_path = "/sbin/iscsiadm"; - ifcfg_name = utils_get_ifcfg_name (filename, TRUE); if (!ifcfg_name) { g_set_error (error, IFCFG_PLUGIN_ERROR, 0, @@ -5057,6 +4795,17 @@ connection_from_file (const char *filename, goto done; } + /* iBFT is handled by the iBFT settings plugin */ + bootproto = svGetValue (parsed, "BOOTPROTO", FALSE); + if (bootproto && !g_ascii_strcasecmp (bootproto, "ibft")) { + if (out_ignore_error) + *out_ignore_error = TRUE; + g_set_error (error, IFCFG_PLUGIN_ERROR, 0, + "Ignoring iBFT configuration"); + g_free (bootproto); + goto done; + } + type = NULL; devtype = svGetValue (parsed, "DEVICETYPE", FALSE); @@ -5151,7 +4900,7 @@ connection_from_file (const char *filename, if (!connection) goto done; - s_ip6 = make_ip6_setting (parsed, network_file, iscsiadm_path, error); + s_ip6 = make_ip6_setting (parsed, network_file, error); if (!s_ip6) { g_object_unref (connection); connection = NULL; @@ -5159,7 +4908,7 @@ connection_from_file (const char *filename, } else nm_connection_add_setting (connection, s_ip6); - s_ip4 = make_ip4_setting (parsed, network_file, iscsiadm_path, error); + s_ip4 = make_ip4_setting (parsed, network_file, error); if (!s_ip4) { g_object_unref (connection); connection = NULL; @@ -5193,22 +4942,6 @@ connection_from_file (const char *filename, if (s_dcb) nm_connection_add_setting (connection, s_dcb); - /* iSCSI / ibft connections are read-only since their settings are - * stored in NVRAM and can only be changed in BIOS. - */ - bootproto = svGetValue (parsed, "BOOTPROTO", FALSE); - if ( bootproto - && connection - && !g_ascii_strcasecmp (bootproto, "ibft")) { - NMSettingConnection *s_con; - - s_con = nm_connection_get_setting_connection (connection); - g_assert (s_con); - - g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_READ_ONLY, TRUE, NULL); - } - g_free (bootproto); - if (!nm_connection_normalize (connection, NULL, NULL, error)) { g_object_unref (connection); connection = NULL; diff --git a/src/settings/plugins/ifcfg-rh/reader.h b/src/settings/plugins/ifcfg-rh/reader.h index 371f4504f8..c23e5870ef 100644 --- a/src/settings/plugins/ifcfg-rh/reader.h +++ b/src/settings/plugins/ifcfg-rh/reader.h @@ -29,7 +29,6 @@ NMConnection *connection_from_file (const char *filename, const char *network_file, /* for unit tests only */ const char *test_type, /* for unit tests only */ - const char *iscsiadm_path, /* for unit tests only */ char **out_unhandled, char **out_keyfile, char **out_routefile, diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/Makefile.am index f01dac4832..e3eae46609 100644 --- a/src/settings/plugins/ifcfg-rh/tests/Makefile.am +++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.am @@ -50,15 +50,5 @@ test_ifcfg_rh_utils_LDADD = \ TESTS = test-ifcfg-rh-utils test-ifcfg-rh -EXTRA_DIST = \ - iscsiadm-test-dhcp \ - iscsiadm-test-static \ - iscsiadm-test-bad-ipaddr \ - iscsiadm-test-bad-gateway \ - iscsiadm-test-bad-dns1 \ - iscsiadm-test-bad-dns2 \ - iscsiadm-test-bad-entry \ - iscsiadm-test-bad-record - endif diff --git a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-entry b/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-entry deleted file mode 100755 index eba0ec6730..0000000000 --- a/src/settings/plugins/ifcfg-rh/tests/iscsiadm-test-bad-entry +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -cat << EOF -# BEGIN RECORD -iface.initiatorname = iqn.pjones6 -iface.hwaddress = 00:33:21:98:b9:f0 -iface.bootproto = STATIC -iface.ipaddress 192.168.32.72 -iface.subnet_mask = 255.255.252.0 -iface.gateway = 192.168.35.254 -iface.primary_dns = 10.16.255.2 -iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 -iface.net_ifacename = eth0 -node.name = iqn.0.2008-11.com.blahblah:iscsi0 -node.conn[0].address = 10.16.52.16 -node.conn[0].port = 3260 -node.boot_lun = 00000000 -# END RECORD -# BEGIN RECORD -iface.initiatorname = iqn.pjones6 -iface.hwaddress = 00:33:21:98:b9:f1 -iface.bootproto = DHCP -iface.gateway = 10.16.52.254 -iface.primary_dns = 10.16.255.2 -iface.secondary_dns = 10.16.255.3 -iface.vlan = 0 -iface.net_ifacename = eth1 -node.name = iqn.1.2008-11.com.blahblah:iscsi1 -node.conn[0].address = 10.16.52.16 -node.conn[0].port = 3260 -node.boot_lun = 00000000 -# END RECORD -EOF - diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am index 1701aeeb3c..09e47281c4 100644 --- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am @@ -61,8 +61,7 @@ EXTRA_DIST = \ ifcfg-test-wifi-hidden \ test_ca_cert.pem \ test1_key_and_cert.pem \ - ifcfg-test-ibft-dhcp \ - ifcfg-test-ibft-static \ + ifcfg-test-ibft \ ifcfg-test-static-routes-legacy \ route-test-static-routes-legacy \ ifcfg-test-wired-static-routes \ diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft new file mode 100644 index 0000000000..d3e4edca1a --- /dev/null +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ibft @@ -0,0 +1,10 @@ +# Generated by dracut initrd +DEVICE="ibft0" +ONBOOT=yes +NETBOOT=yes +UUID="2aa8c19d-9744-4ca4-b74f-c37e73f2918e" +BOOTPROTO=ibft +HWADDR="00:33:21:98:b9:f0" +TYPE=Ethernet +NAME="ibft0" + diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index f835064ce2..bcbc31e283 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -193,7 +193,7 @@ test_read_basic (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-minimal", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); success = nm_connection_verify (connection, &error); @@ -254,7 +254,7 @@ test_read_variables_corner_cases (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-variables-corner-cases-1", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); success = nm_connection_verify (connection, &error); @@ -301,7 +301,7 @@ test_read_unmanaged (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-nm-controlled", - NULL, TYPE_ETHERNET, NULL, + NULL, TYPE_ETHERNET, &unhandled_spec, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); @@ -334,7 +334,7 @@ test_read_unmanaged_unrecognized (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-nm-controlled-unrecognized", - NULL, NULL, NULL, + NULL, NULL, &unhandled_spec, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); @@ -365,7 +365,7 @@ test_read_unrecognized (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-unrecognized", - NULL, NULL, NULL, + NULL, NULL, &unhandled_spec, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); @@ -402,8 +402,6 @@ test_read_wired_static (const char *file, const char *expected_dns2 = "4.2.2.2"; guint32 addr; struct in6_addr addr6; - const char *expected_address1 = "192.168.1.5"; - const char *expected_address1_gw = "192.168.1.1"; const char *expected6_address1 = "dead:beaf::1"; const char *expected6_address2 = "dead:beaf::2"; const char *expected6_dns1 = "1:2:3:4::a"; @@ -412,7 +410,7 @@ test_read_wired_static (const char *file, NMIP6Address *ip6_addr; gboolean success; - connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, + connection = connection_from_file (file, NULL, TYPE_ETHERNET, &unmanaged, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -457,10 +455,8 @@ test_read_wired_static (const char *file, ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0); g_assert (ip4_addr); g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24); - g_assert_cmpint (inet_pton (AF_INET, expected_address1, &addr), >, 0); - g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr); - g_assert_cmpint (inet_pton (AF_INET, expected_address1_gw, &addr), >, 0); - g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_address (ip4_addr), "192.168.1.5"); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_gateway (ip4_addr), "192.168.1.1"); /* ===== IPv6 SETTING ===== */ s_ip6 = nm_connection_get_setting_ip6_config (connection); @@ -514,7 +510,7 @@ test_read_wired_static_no_prefix (gconstpointer user_data) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*missing PREFIX, assuming*"); - connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL, + connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_no_error (error); @@ -568,7 +564,6 @@ test_read_wired_dhcp (void) connection = connection_from_file (TEST_IFCFG_WIRED_DHCP, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -729,7 +724,7 @@ test_read_wired_dhcp_plus_ip (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip", - NULL, TYPE_ETHERNET, NULL, NULL, + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -802,9 +797,6 @@ test_read_wired_dhcp_plus_ip (void) g_object_unref (connection); } -#define TEST_IFCFG_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-global-gateway" -#define TEST_NETWORK_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/network-test-wired-global-gateway" - static void test_read_wired_global_gateway (void) { @@ -812,249 +804,69 @@ test_read_wired_global_gateway (void) NMSettingConnection *s_con; NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; - char *unmanaged = NULL; - char *keyfile = NULL; - char *routefile = NULL; - char *route6file = NULL; - gboolean ignore_error = FALSE; GError *error = NULL; - const char *tmp; - const char *expected_id = "System test-wired-global-gateway"; - guint32 addr; - const char *expected_address1 = "192.168.1.5"; - const char *expected_address1_gw = "192.168.1.2"; NMIP4Address *ip4_addr; + char *unmanaged = NULL; - connection = connection_from_file (TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - TEST_NETWORK_WIRED_GLOBAL_GATEWAY, - TYPE_ETHERNET, - NULL, - &unmanaged, - &keyfile, - &routefile, - &route6file, - &error, - &ignore_error); - ASSERT (connection != NULL, - "wired-global-gateway-read", "failed to read %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message); - - ASSERT (nm_connection_verify (connection, &error), - "wired-global-gateway-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message); - - ASSERT (unmanaged == NULL, - "wired-global-gateway-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_GLOBAL_GATEWAY); + connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-global-gateway", + TEST_IFCFG_DIR"/network-scripts/network-test-wired-global-gateway", + TYPE_ETHERNET, &unmanaged, NULL, NULL, NULL, &error, NULL); + nmtst_assert_connection_verifies_without_normalization (connection); + g_assert (unmanaged == NULL); /* ===== CONNECTION SETTING ===== */ - s_con = nm_connection_get_setting_connection (connection); - ASSERT (s_con != NULL, - "wired-global-gateway-verify-connection", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_CONNECTION_SETTING_NAME); - - /* ID */ - tmp = nm_setting_connection_get_id (s_con); - ASSERT (tmp != NULL, - "wired-global-gateway-verify-connection", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - ASSERT (strcmp (tmp, expected_id) == 0, - "wired-global-gateway-verify-connection", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "System test-wired-global-gateway"); /* ===== WIRED SETTING ===== */ - s_wired = nm_connection_get_setting_wired (connection); - ASSERT (s_wired != NULL, - "wired-global-gateway-verify-wired", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_WIRED_SETTING_NAME); + g_assert (s_wired); /* ===== IPv4 SETTING ===== */ - s_ip4 = nm_connection_get_setting_ip4_config (connection); - ASSERT (s_ip4 != NULL, - "wired-global-gateway-verify-ip4", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME); - - /* Method */ - tmp = nm_setting_ip4_config_get_method (s_ip4); - ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0, - "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_METHOD); + g_assert (s_ip4); + g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL); /* Address #1 */ ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0); - ASSERT (ip4_addr, - "wired-global-gateway-verify-ip4", "failed to verify %s: missing IP4 address #1", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 24, - "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0, - "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - ASSERT (nm_ip4_address_get_address (ip4_addr) == addr, - "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0, - "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr, - "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway", - TEST_IFCFG_WIRED_GLOBAL_GATEWAY, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); + g_assert (ip4_addr); + g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_address (ip4_addr), "192.168.1.5"); + nmtst_assert_ip4_address_equals (nm_ip4_address_get_gateway (ip4_addr), "192.168.1.2"); - g_free (unmanaged); - g_free (keyfile); - g_free (routefile); - g_free (route6file); g_object_unref (connection); } -#define TEST_IFCFG_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-never-default" -#define TEST_NETWORK_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/network-test-wired-never-default" - static void test_read_wired_never_default (void) { NMConnection *connection; - NMSettingConnection *s_con; - NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; - char *unmanaged = NULL; - char *keyfile = NULL; - char *routefile = NULL; - char *route6file = NULL; - gboolean ignore_error = FALSE; GError *error = NULL; - const char *tmp; - const char *expected_id = "System test-wired-never-default"; - connection = connection_from_file (TEST_IFCFG_WIRED_NEVER_DEFAULT, - TEST_NETWORK_WIRED_NEVER_DEFAULT, - TYPE_ETHERNET, - NULL, - &unmanaged, - &keyfile, - &routefile, - &route6file, - &error, - &ignore_error); - ASSERT (connection != NULL, - "wired-never-default-read", "failed to read %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message); - - ASSERT (nm_connection_verify (connection, &error), - "wired-never-default-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message); - - ASSERT (unmanaged == NULL, - "wired-never-default-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_NEVER_DEFAULT); - - /* ===== CONNECTION SETTING ===== */ - - s_con = nm_connection_get_setting_connection (connection); - ASSERT (s_con != NULL, - "wired-never-default-verify-connection", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_CONNECTION_SETTING_NAME); - - /* ID */ - tmp = nm_setting_connection_get_id (s_con); - ASSERT (tmp != NULL, - "wired-never-default-verify-connection", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - ASSERT (strcmp (tmp, expected_id) == 0, - "wired-never-default-verify-connection", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); + connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-never-default", + TEST_IFCFG_DIR"/network-scripts/network-test-wired-never-default", + TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); + nmtst_assert_connection_verifies_without_normalization (connection); /* ===== WIRED SETTING ===== */ - - s_wired = nm_connection_get_setting_wired (connection); - ASSERT (s_wired != NULL, - "wired-never-default-verify-wired", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_WIRED_SETTING_NAME); + g_assert (nm_connection_get_setting_wired (connection)); /* ===== IPv4 SETTING ===== */ - s_ip4 = nm_connection_get_setting_ip4_config (connection); - ASSERT (s_ip4 != NULL, - "wired-never-default-verify-ip4", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP4_CONFIG_SETTING_NAME); - - /* Method */ - tmp = nm_setting_ip4_config_get_method (s_ip4); - ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0, - "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_METHOD); - - ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE, - "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_NEVER_DEFAULT); - - /* DNS Addresses */ - ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 0, - "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); + g_assert (s_ip4); + g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO); + g_assert (nm_setting_ip4_config_get_never_default (s_ip4)); + g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 0); /* ===== IPv6 SETTING ===== */ - s_ip6 = nm_connection_get_setting_ip6_config (connection); - ASSERT (s_ip6 != NULL, - "wired-never-default-verify-ip6", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP6_CONFIG_SETTING_NAME); - - /* Method */ - tmp = nm_setting_ip6_config_get_method (s_ip6); - ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0, - "wired-never-default-verify-ip6", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP6_CONFIG_SETTING_NAME, - NM_SETTING_IP6_CONFIG_METHOD); - - ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE, - "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_NEVER_DEFAULT, - NM_SETTING_IP6_CONFIG_SETTING_NAME, - NM_SETTING_IP6_CONFIG_NEVER_DEFAULT); + g_assert (s_ip6); + g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO); + g_assert (nm_setting_ip6_config_get_never_default (s_ip6)); - g_free (unmanaged); - g_free (keyfile); - g_free (routefile); - g_free (route6file); g_object_unref (connection); } @@ -1080,7 +892,6 @@ test_read_wired_defroute_no (void) connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -1199,7 +1010,6 @@ test_read_wired_defroute_no_gatewaydev_yes (void) connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES, TEST_NETWORK_WIRED_DEFROUTE_NO_GATEWAYDEV_YES, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -1303,8 +1113,6 @@ test_read_wired_defroute_no_gatewaydev_yes (void) g_object_unref (connection); } -#define TEST_IFCFG_WIRED_STATIC_ROUTES TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes" - static void test_read_wired_static_routes (void) { @@ -1312,159 +1120,44 @@ test_read_wired_static_routes (void) NMSettingConnection *s_con; NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; - char *unmanaged = NULL; - char *keyfile = NULL; - char *routefile = NULL; - char *route6file = NULL; - gboolean ignore_error = FALSE; GError *error = NULL; - const char *tmp; NMIP4Route *ip4_route; - guint32 addr; - const char *expected_id = "System test-wired-static-routes"; - const char *expected_dst1 = "11.22.33.0"; - const char *expected_dst2 = "44.55.66.77"; - const char *expected_gw1 = "192.168.1.5"; - const char *expected_gw2 = "192.168.1.7"; - - connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES, - NULL, - TYPE_ETHERNET, - NULL, - &unmanaged, - &keyfile, - &routefile, - &route6file, - &error, - &ignore_error); - - ASSERT (connection != NULL, - "wired-static-routes-read", - "failed to read %s: %s", - TEST_IFCFG_WIRED_STATIC_ROUTES, error->message); - ASSERT (nm_connection_verify (connection, &error), - "wired-static-routes-verify", "failed to verify %s: %s", - TEST_IFCFG_WIRED_STATIC_ROUTES, error->message); - - ASSERT (unmanaged == NULL, - "wired-static-routes-verify", - "failed to verify %s: unexpected unmanaged value", - TEST_IFCFG_WIRED_STATIC_ROUTES); + connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes", + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); + nmtst_assert_connection_verifies_without_normalization (connection); /* ===== CONNECTION SETTING ===== */ - s_con = nm_connection_get_setting_connection (connection); - ASSERT (s_con != NULL, - "wired-static-routes-verify-connection", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_CONNECTION_SETTING_NAME); - - /* ID */ - tmp = nm_setting_connection_get_id (s_con); - ASSERT (tmp != NULL, - "wired-static-routes-verify-connection", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - ASSERT (strcmp (tmp, expected_id) == 0, - "wired-static-routes-verify-connection", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, "System test-wired-static-routes"); /* ===== WIRED SETTING ===== */ - s_wired = nm_connection_get_setting_wired (connection); - ASSERT (s_wired != NULL, - "wired-static-routes-verify-wired", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_WIRED_SETTING_NAME); + g_assert (s_wired); /* ===== IPv4 SETTING ===== */ - s_ip4 = nm_connection_get_setting_ip4_config (connection); - ASSERT (s_ip4 != NULL, - "wired-static-routes-verify-ip4", "failed to verify %s: missing %s setting", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME); - - /* Method */ - tmp = nm_setting_ip4_config_get_method (s_ip4); - ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_METHOD); + g_assert (s_ip4); + g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL); /* Routes */ - ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 2, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ROUTES); + g_assert_cmpint (nm_setting_ip4_config_get_num_routes (s_ip4), ==, 2); ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0); - ASSERT (ip4_route, - "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #1", - TEST_IFCFG_WIRED_STATIC_ROUTES); - - ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0, - "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1", - TEST_IFCFG_WIRED_STATIC_ROUTES); - ASSERT (nm_ip4_route_get_dest (ip4_route) == addr, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ROUTES); - - ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix", - TEST_IFCFG_WIRED_STATIC_ROUTES); - - ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0, - "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1", - TEST_IFCFG_WIRED_STATIC_ROUTES); - ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ROUTES); + g_assert (ip4_route); + nmtst_assert_ip4_address_equals (nm_ip4_route_get_dest (ip4_route), "11.22.33.0"); + g_assert_cmpint (nm_ip4_route_get_prefix (ip4_route), ==, 24); + nmtst_assert_ip4_address_equals (nm_ip4_route_get_next_hop (ip4_route), "192.168.1.5"); + g_assert_cmpint (nm_ip4_route_get_metric (ip4_route), ==, 0); ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1); - ASSERT (ip4_route, - "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #2", - TEST_IFCFG_WIRED_STATIC_ROUTES); + g_assert (ip4_route); + nmtst_assert_ip4_address_equals (nm_ip4_route_get_dest (ip4_route), "44.55.66.77"); + g_assert_cmpint (nm_ip4_route_get_prefix (ip4_route), ==, 32); + nmtst_assert_ip4_address_equals (nm_ip4_route_get_next_hop (ip4_route), "192.168.1.7"); + g_assert_cmpint (nm_ip4_route_get_metric (ip4_route), ==, 3); - ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0, - "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2", - TEST_IFCFG_WIRED_STATIC_ROUTES); - ASSERT (nm_ip4_route_get_dest (ip4_route) == addr, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ROUTES); - - ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix", - TEST_IFCFG_WIRED_STATIC_ROUTES); - - ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0, - "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2", - TEST_IFCFG_WIRED_STATIC_ROUTES); - ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2", - TEST_IFCFG_WIRED_STATIC_ROUTES, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ROUTES); - ASSERT (nm_ip4_route_get_metric (ip4_route) == 3, - "wired-static-routes-verify-ip4", "failed to verify %s: unexpected route metric #2", - TEST_IFCFG_WIRED_STATIC_ROUTES); - - g_free (unmanaged); - g_free (keyfile); - g_free (routefile); - g_free (route6file); g_object_unref (connection); } @@ -1497,7 +1190,6 @@ test_read_wired_static_routes_legacy (void) connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -1700,7 +1392,6 @@ test_read_wired_ipv4_manual (const char *file, const char *expected_id) connection = connection_from_file (file, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -1861,7 +1552,6 @@ test_read_wired_ipv6_manual (void) connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_MANUAL, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2140,7 +1830,6 @@ test_read_wired_ipv6_only (void) connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_ONLY, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2292,7 +1981,6 @@ test_read_wired_dhcp6_only (void) connection = connection_from_file (TEST_IFCFG_WIRED_DHCP6_ONLY, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2392,7 +2080,6 @@ test_read_onboot_no (void) connection = connection_from_file (TEST_IFCFG_ONBOOT_NO, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2448,7 +2135,6 @@ test_read_noip (void) connection = connection_from_file (TEST_IFCFG_NOIP, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2504,7 +2190,6 @@ test_read_wired_8021x_peap_mschapv2 (void) connection = connection_from_file (TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2698,7 +2383,6 @@ test_read_wired_8021x_tls_secret_flags (const char *ifcfg, NMSettingSecretFlags connection = connection_from_file (ifcfg, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -2755,7 +2439,7 @@ test_read_write_802_1X_subj_matches (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*missing IEEE_8021X_CA_CERT*peap*"); connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-802-1X-subj-matches", - NULL, TYPE_ETHERNET, NULL, NULL, + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_no_error (error); @@ -2789,7 +2473,7 @@ test_read_write_802_1X_subj_matches (void) /* re-read the connection for comparison */ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*missing IEEE_8021X_CA_CERT*peap*"); - reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL, + reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); unlink (written); @@ -2838,7 +2522,7 @@ test_read_802_1x_ttls_eapgtc (void) */ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-802-1x-ttls-eapgtc", - NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); success = nm_connection_verify (connection, &error); @@ -2885,7 +2569,6 @@ test_read_wired_aliases_good (void) connection = connection_from_file (TEST_IFCFG_ALIASES_GOOD, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -3032,7 +2715,6 @@ test_read_wired_aliases_bad (const char *base, const char *expected_id) connection = connection_from_file (base, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -3171,7 +2853,6 @@ test_read_wifi_open (void) connection = connection_from_file (TEST_IFCFG_WIFI_OPEN, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -3345,7 +3026,6 @@ test_read_wifi_open_auto (void) connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_AUTO, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -3428,7 +3108,6 @@ test_read_wifi_open_ssid_hex (void) connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_HEX, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -3509,7 +3188,6 @@ test_read_wifi_open_ssid_bad (const char *file, const char *test) connection = connection_from_file (file, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -3547,7 +3225,6 @@ test_read_wifi_open_ssid_quoted (void) connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_QUOTED, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -3644,7 +3321,6 @@ test_read_wifi_wep (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -3906,7 +3582,6 @@ test_read_wifi_wep_adhoc (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_ADHOC, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -4153,7 +3828,6 @@ test_read_wifi_wep_passphrase (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_PASSPHRASE, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -4279,7 +3953,6 @@ test_read_wifi_wep_40_ascii (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_40_ASCII, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -4403,7 +4076,6 @@ test_read_wifi_wep_104_ascii (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_104_ASCII, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -4528,7 +4200,6 @@ test_read_wifi_leap (void) connection = connection_from_file (TEST_IFCFG_WIFI_LEAP, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -4652,7 +4323,6 @@ test_read_wifi_leap_secret_flags (const char *file, NMSettingSecretFlags expecte connection = connection_from_file (file, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -4727,7 +4397,6 @@ test_read_wifi_wpa_psk (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5016,7 +4685,6 @@ test_read_wifi_wpa_psk_2 (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_2, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5108,7 +4776,6 @@ test_read_wifi_wpa_psk_unquoted (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5198,7 +4865,6 @@ test_read_wifi_wpa_psk_unquoted2 (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5242,7 +4908,6 @@ test_read_wifi_wpa_psk_adhoc (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_ADHOC, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5420,7 +5085,6 @@ test_read_wifi_wpa_psk_hex (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_HEX, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5562,7 +5226,6 @@ test_read_wifi_wpa_eap_tls (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TLS, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -5703,7 +5366,6 @@ test_read_wifi_wpa_eap_ttls_tls (void) connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5858,7 +5520,6 @@ test_read_wifi_dynamic_wep_leap (void) connection = connection_from_file (TEST_IFCFG_WIFI_DYNAMIC_WEP_LEAP, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -5937,7 +5598,6 @@ test_read_wifi_wep_eap_ttls_chap (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -6084,7 +5744,7 @@ test_read_wifi_hidden (void) GError *error = NULL; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-hidden", - NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -6172,7 +5832,7 @@ test_write_wifi_hidden (void) nm_connection_normalize (connection, NULL, NULL, NULL); /* re-read the connection for comparison */ - reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL, + reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL); unlink (testfile); g_assert_no_error (error); @@ -6215,7 +5875,6 @@ test_read_wired_qeth_static (void) connection = connection_from_file (TEST_IFCFG_WIRED_QETH_STATIC, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -6389,7 +6048,6 @@ test_read_wired_ctc_static (void) connection = connection_from_file (TEST_IFCFG_WIRED_CTC_STATIC, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -6460,7 +6118,6 @@ test_read_wifi_wep_no_keys (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_NO_KEYS, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -6570,7 +6227,6 @@ test_read_permissions (void) connection = connection_from_file (TEST_IFCFG_PERMISSIONS, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -6646,7 +6302,6 @@ test_read_wifi_wep_agent_keys (void) connection = connection_from_file (TEST_IFCFG_WIFI_WEP_AGENT_KEYS, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -6873,7 +6528,6 @@ test_write_wired_static (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -6996,7 +6650,6 @@ test_write_wired_dhcp (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -7032,7 +6685,7 @@ test_write_wired_dhcp_plus_ip (void) gboolean success = FALSE; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip", - NULL, TYPE_ETHERNET, NULL, NULL, + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection != NULL); @@ -7047,7 +6700,7 @@ test_write_wired_dhcp_plus_ip (void) nm_connection_normalize (connection, NULL, NULL, NULL); /* re-read the connection for comparison */ - reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL, + reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); unlink (written); g_free (written); @@ -7078,7 +6731,7 @@ test_read_write_wired_dhcp_send_hostname (void) gboolean success = FALSE; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-send-hostname", - NULL, TYPE_ETHERNET, NULL, NULL, + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection != NULL); @@ -7107,7 +6760,7 @@ test_read_write_wired_dhcp_send_hostname (void) nm_connection_normalize (connection, NULL, NULL, NULL); /* re-read the connection for comparison */ - reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL, + reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); unlink (written); g_free (written); @@ -7235,7 +6888,6 @@ test_write_wired_static_ip6_only (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -7382,7 +7034,7 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, &error, &ignore_error); @@ -7450,7 +7102,6 @@ test_read_write_static_routes_legacy (void) connection = connection_from_file (TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -7540,7 +7191,6 @@ test_read_write_static_routes_legacy (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile2, &routefile2, @@ -7715,7 +7365,6 @@ test_write_wired_static_routes (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -7847,7 +7496,6 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -8032,7 +7680,6 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme, reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -8234,7 +7881,6 @@ test_write_wired_aliases (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -8444,7 +8090,7 @@ test_write_gateway (void) nm_connection_normalize (connection, NULL, NULL, NULL); /* re-read the connection for comparison */ - reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL, + reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL, NULL, NULL, NULL, &error, NULL); unlink (testfile); g_assert_no_error (error); @@ -8568,7 +8214,6 @@ test_write_wifi_open (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -8700,7 +8345,6 @@ test_write_wifi_open_hex_ssid (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -8831,7 +8475,6 @@ test_write_wifi_wep (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -8982,7 +8625,6 @@ test_write_wifi_wep_adhoc (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9123,7 +8765,6 @@ test_write_wifi_wep_passphrase (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9266,7 +8907,6 @@ test_write_wifi_wep_40_ascii (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9409,7 +9049,6 @@ test_write_wifi_wep_104_ascii (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9549,7 +9188,6 @@ test_write_wifi_leap (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9688,7 +9326,6 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9844,7 +9481,6 @@ test_write_wifi_wpa_psk (const char *name, reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -9995,7 +9631,6 @@ test_write_wifi_wpa_psk_adhoc (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10161,7 +9796,6 @@ test_write_wifi_wpa_eap_tls (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10345,7 +9979,6 @@ test_write_wifi_wpa_eap_ttls_tls (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10501,7 +10134,6 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10645,7 +10277,6 @@ test_write_wifi_wpa_then_open (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10692,7 +10323,6 @@ test_write_wifi_wpa_then_open (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10844,7 +10474,6 @@ test_write_wifi_wpa_then_wep_with_perms (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -10897,7 +10526,6 @@ test_write_wifi_wpa_then_wep_with_perms (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -11042,7 +10670,6 @@ test_write_wifi_dynamic_wep_leap (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -11088,399 +10715,6 @@ test_write_wifi_dynamic_wep_leap (void) g_object_unref (reread); } -#define TEST_IFCFG_IBFT_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-dhcp" - -static void -test_read_ibft_dhcp (void) -{ - NMConnection *connection; - NMSettingConnection *s_con; - NMSettingWired *s_wired; - NMSettingIP4Config *s_ip4; - char *unmanaged = NULL; - char *keyfile = NULL; - char *routefile = NULL; - char *route6file = NULL; - gboolean ignore_error = FALSE; - GError *error = NULL; - const char *tmp; - const GByteArray *array; - char expected_mac_address[ETH_ALEN] = { 0x00, 0x33, 0x21, 0x98, 0xb9, 0xf1 }; - const char *expected_id = "System test-ibft-dhcp"; - guint64 expected_timestamp = 0; - - connection = connection_from_file (TEST_IFCFG_IBFT_DHCP, - NULL, - TYPE_ETHERNET, - TEST_IFCFG_DIR "/iscsiadm-test-dhcp", - &unmanaged, - &keyfile, - &routefile, - &route6file, - &error, - &ignore_error); - ASSERT (connection != NULL, - "ibft-dhcp-read", "failed to read %s: %s", TEST_IFCFG_IBFT_DHCP, error->message); - - ASSERT (nm_connection_verify (connection, &error), - "ibft-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_DHCP, error->message); - - /* ===== CONNECTION SETTING ===== */ - - s_con = nm_connection_get_setting_connection (connection); - ASSERT (s_con != NULL, - "ibft-dhcp-verify-connection", "failed to verify %s: missing %s setting", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_CONNECTION_SETTING_NAME); - - /* ID */ - tmp = nm_setting_connection_get_id (s_con); - ASSERT (tmp != NULL, - "ibft-dhcp-verify-connection", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - ASSERT (strcmp (tmp, expected_id) == 0, - "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - - /* UUID can't be tested if the ifcfg does not contain the UUID key, because - * the UUID is generated on the full path of the ifcfg file, which can change - * depending on where the tests are run. - */ - - /* Timestamp */ - ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp, - "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_TIMESTAMP); - - /* Autoconnect */ - ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE, - "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_AUTOCONNECT); - - /* Read-only */ - ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE, - "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_READ_ONLY); - - /* ===== WIRED SETTING ===== */ - - s_wired = nm_connection_get_setting_wired (connection); - ASSERT (s_wired != NULL, - "ibft-dhcp-verify-wired", "failed to verify %s: missing %s setting", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_WIRED_SETTING_NAME); - - /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - ASSERT (array != NULL, - "ibft-dhcp-verify-wired", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, - "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - - ASSERT (nm_setting_wired_get_mtu (s_wired) == 0, - "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MTU); - - /* ===== IPv4 SETTING ===== */ - - s_ip4 = nm_connection_get_setting_ip4_config (connection); - ASSERT (s_ip4 != NULL, - "ibft-dhcp-verify-ip4", "failed to verify %s: missing %s setting", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_IP4_CONFIG_SETTING_NAME); - - /* Method */ - tmp = nm_setting_ip4_config_get_method (s_ip4); - ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0, - "ibft-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_DHCP, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_METHOD); - - g_free (unmanaged); - g_free (keyfile); - g_free (routefile); - g_free (route6file); - g_object_unref (connection); -} - -#define TEST_IFCFG_IBFT_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-static" - -static void -test_read_ibft_static (void) -{ - NMConnection *connection; - NMSettingConnection *s_con; - NMSettingWired *s_wired; - NMSettingIP4Config *s_ip4; - char *unmanaged = NULL; - char *keyfile = NULL; - char *routefile = NULL; - char *route6file = NULL; - gboolean ignore_error = FALSE; - GError *error = NULL; - const char *tmp; - const GByteArray *array; - char expected_mac_address[ETH_ALEN] = { 0x00, 0x33, 0x21, 0x98, 0xb9, 0xf0 }; - const char *expected_id = "System test-ibft-static"; - guint64 expected_timestamp = 0; - const char *expected_dns1 = "10.16.255.2"; - const char *expected_dns2 = "10.16.255.3"; - guint32 addr; - const char *expected_address1 = "192.168.32.72"; - const char *expected_address1_gw = "192.168.35.254"; - NMIP4Address *ip4_addr; - - connection = connection_from_file (TEST_IFCFG_IBFT_STATIC, - NULL, - TYPE_ETHERNET, - TEST_IFCFG_DIR "/iscsiadm-test-static", - &unmanaged, - &keyfile, - &routefile, - &route6file, - &error, - &ignore_error); - ASSERT (connection != NULL, - "ibft-static-read", "failed to read %s: %s", TEST_IFCFG_IBFT_STATIC, error->message); - - ASSERT (nm_connection_verify (connection, &error), - "ibft-static-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_STATIC, error->message); - - /* ===== CONNECTION SETTING ===== */ - - s_con = nm_connection_get_setting_connection (connection); - ASSERT (s_con != NULL, - "ibft-static-verify-connection", "failed to verify %s: missing %s setting", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_CONNECTION_SETTING_NAME); - - /* ID */ - tmp = nm_setting_connection_get_id (s_con); - ASSERT (tmp != NULL, - "ibft-static-verify-connection", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - ASSERT (strcmp (tmp, expected_id) == 0, - "ibft-static-verify-connection", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_ID); - - /* UUID can't be tested if the ifcfg does not contain the UUID key, because - * the UUID is generated on the full path of the ifcfg file, which can change - * depending on where the tests are run. - */ - - /* Timestamp */ - ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp, - "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_TIMESTAMP); - - /* Autoconnect */ - ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE, - "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_AUTOCONNECT); - - /* Read-only */ - ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE, - "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_CONNECTION_SETTING_NAME, - NM_SETTING_CONNECTION_READ_ONLY); - - /* ===== WIRED SETTING ===== */ - - s_wired = nm_connection_get_setting_wired (connection); - ASSERT (s_wired != NULL, - "ibft-static-verify-wired", "failed to verify %s: missing %s setting", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_WIRED_SETTING_NAME); - - /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - ASSERT (array != NULL, - "ibft-static-verify-wired", "failed to verify %s: missing %s / %s key", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, - "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - - ASSERT (nm_setting_wired_get_mtu (s_wired) == 0, - "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MTU); - - /* ===== IPv4 SETTING ===== */ - - s_ip4 = nm_connection_get_setting_ip4_config (connection); - ASSERT (s_ip4 != NULL, - "ibft-static-verify-ip4", "failed to verify %s: missing %s setting", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME); - - /* Method */ - tmp = nm_setting_ip4_config_get_method (s_ip4); - ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0, - "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_METHOD); - - /* DNS Addresses */ - ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2, - "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - - ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0, - "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr, - "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - - ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0, - "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr, - "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - - ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1, - "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - - /* Address #1 */ - ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0); - ASSERT (ip4_addr, - "ibft-static-verify-ip4", "failed to verify %s: missing IP4 address #1", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 22, - "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0, - "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_DNS); - ASSERT (nm_ip4_address_get_address (ip4_addr) == addr, - "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0, - "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr, - "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway", - TEST_IFCFG_IBFT_STATIC, - NM_SETTING_IP4_CONFIG_SETTING_NAME, - NM_SETTING_IP4_CONFIG_ADDRESSES); - - g_free (unmanaged); - g_free (keyfile); - g_free (routefile); - g_free (route6file); - g_object_unref (connection); -} - -static void -test_read_ibft_malformed (const char *name, const char *iscsiadm_path, gboolean expect_warning) -{ - NMConnection *connection; - char *unmanaged = NULL; - char *keyfile = NULL; - char *routefile = NULL; - char *route6file = NULL; - gboolean ignore_error = FALSE; - GError *error = NULL; - - g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS)); - - if (expect_warning) { - g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, - "*malformed iscsiadm record*"); - } - connection = connection_from_file (TEST_IFCFG_IBFT_STATIC, - NULL, - TYPE_ETHERNET, - iscsiadm_path, - &unmanaged, - &keyfile, - &routefile, - &route6file, - &error, - &ignore_error); - if (expect_warning) - g_test_assert_expected_messages (); - ASSERT (connection == NULL, - name, "unexpectedly able to read %s", TEST_IFCFG_IBFT_STATIC); - - g_free (unmanaged); - g_free (keyfile); - g_free (routefile); - g_free (route6file); -} - static void test_write_wired_qeth_dhcp (void) { @@ -11576,7 +10810,6 @@ test_write_wired_qeth_dhcp (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -11713,7 +10946,6 @@ test_write_wired_ctc_dhcp (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -11825,7 +11057,6 @@ test_write_permissions (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -11955,7 +11186,6 @@ test_write_wifi_wep_agent_keys (void) reread = connection_from_file (testfile, NULL, TYPE_WIRELESS, - NULL, &unmanaged, &keyfile, &routefile, @@ -12230,7 +11460,6 @@ test_read_bridge_main (void) connection = connection_from_file (TEST_IFCFG_BRIDGE_MAIN, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12363,7 +11592,6 @@ test_write_bridge_main (void) reread = connection_from_file (testfile, NULL, TYPE_BRIDGE, - NULL, &unmanaged, &keyfile, &routefile, @@ -12405,7 +11633,6 @@ test_read_bridge_component (void) connection = connection_from_file (TEST_IFCFG_BRIDGE_COMPONENT, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12518,7 +11745,6 @@ test_write_bridge_component (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12561,7 +11787,6 @@ test_read_bridge_missing_stp (void) connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-missing-stp", NULL, TYPE_BRIDGE, - NULL, &unmanaged, &keyfile, &routefile, @@ -12604,7 +11829,6 @@ test_read_vlan_interface (void) connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12674,7 +11898,6 @@ test_read_vlan_only_vlan_id (void) connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12716,7 +11939,6 @@ test_read_vlan_only_device (void) connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_DEVICE, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12749,7 +11971,7 @@ test_read_vlan_physdev (void) NMSettingVlan *s_vlan; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-physdev", - NULL, TYPE_ETHERNET, NULL, NULL, + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -12781,7 +12003,6 @@ test_write_vlan (void) connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE, NULL, TYPE_VLAN, - NULL, &unmanaged, &keyfile, &routefile, @@ -12821,7 +12042,6 @@ test_write_vlan_only_vlanid (void) connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID, NULL, TYPE_VLAN, - NULL, &unmanaged, &keyfile, &routefile, @@ -12853,7 +12073,6 @@ test_write_vlan_only_vlanid (void) reread = connection_from_file (written, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -12962,7 +12181,6 @@ test_write_ethernet_missing_ipv6 (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -13002,6 +12220,19 @@ test_write_ethernet_missing_ipv6 (void) g_object_unref (reread); } +static void +test_read_ibft_ignored (void) +{ + NMConnection *connection; + GError *error = NULL; + + connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft", + NULL, TYPE_ETHERNET, + NULL, NULL, NULL, NULL, &error, NULL); + g_assert_no_error (error); + g_assert (connection == NULL); +} + #define TEST_IFCFG_BOND_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-main" static void @@ -13019,7 +12250,6 @@ test_read_bond_main (void) connection = connection_from_file (TEST_IFCFG_BOND_MAIN, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -13151,7 +12381,6 @@ test_write_bond_main (void) reread = connection_from_file (testfile, NULL, TYPE_BOND, - NULL, &unmanaged, &keyfile, &routefile, @@ -13195,7 +12424,6 @@ test_read_bond_slave (void) connection = connection_from_file (TEST_IFCFG_BOND_SLAVE, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -13303,7 +12531,6 @@ test_write_bond_slave (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, &unmanaged, &keyfile, &routefile, @@ -13353,7 +12580,6 @@ test_read_infiniband (void) connection = connection_from_file (TEST_IFCFG_INFINIBAND, NULL, TYPE_INFINIBAND, - NULL, &unmanaged, &keyfile, &routefile, @@ -13517,7 +12743,6 @@ test_write_infiniband (void) reread = connection_from_file (testfile, NULL, TYPE_INFINIBAND, - NULL, &unmanaged, &keyfile, &routefile, @@ -13561,7 +12786,6 @@ test_read_bond_slave_ib (void) connection = connection_from_file (TEST_IFCFG_BOND_SLAVE_IB, NULL, NULL, - NULL, &unmanaged, &keyfile, &routefile, @@ -13672,7 +12896,6 @@ test_write_bond_slave_ib (void) reread = connection_from_file (testfile, NULL, NULL, - NULL, &unmanaged, &keyfile, &routefile, @@ -13722,7 +12945,7 @@ test_read_dcb_basic (void) gboolean expected_pfcs[8] = { TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE }; connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); success = nm_connection_verify (connection, &error); @@ -13855,7 +13078,7 @@ test_write_dcb_basic (void) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, &error, &ignore_error); @@ -13880,7 +13103,7 @@ test_read_dcb_default_app_priorities (void) gboolean success; connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-default-app-priorities", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); success = nm_connection_verify (connection, &error); @@ -13911,7 +13134,7 @@ test_read_dcb_bad_booleans (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*invalid DCB_PG_STRICT value*not all 0s and 1s*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-bad-booleans", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -13928,7 +13151,7 @@ test_read_dcb_short_booleans (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*DCB_PG_STRICT value*8 characters*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-short-booleans", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -13945,7 +13168,7 @@ test_read_dcb_bad_uints (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*invalid DCB_PG_UP2TC value*not 0 - 7*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-bad-uints", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -13962,7 +13185,7 @@ test_read_dcb_short_uints (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*DCB_PG_UP2TC value*8 characters*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-short-uints", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -13979,7 +13202,7 @@ test_read_dcb_bad_percent (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*invalid DCB_PG_PCT percentage value*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-bad-percent", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -13996,7 +13219,7 @@ test_read_dcb_short_percent (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*invalid DCB_PG_PCT percentage list value*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-short-percent", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -14013,7 +13236,7 @@ test_read_dcb_pgpct_not_100 (void) g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING, "*DCB_PG_PCT percentages do not equal 100*"); connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dcb-pgpct-not-100", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_test_assert_expected_messages (); g_assert_error (error, IFCFG_PLUGIN_ERROR, 0); @@ -14032,7 +13255,7 @@ test_read_fcoe_mode (gconstpointer user_data) char *file; file = g_strdup_printf (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-fcoe-%s", expected_mode); - connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_free (file); g_assert_no_error (error); g_assert (connection); @@ -14125,7 +13348,7 @@ test_write_fcoe_mode (gconstpointer user_data) reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, &error, &ignore_error); @@ -14152,7 +13375,7 @@ test_read_team_master (void) const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }"; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-master", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -14242,7 +13465,7 @@ test_write_team_master (void) nm_connection_normalize (connection, NULL, NULL, NULL); /* re-read the connection for comparison */ - reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL, + reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); unlink (testfile); g_assert_no_error (error); @@ -14270,7 +13493,7 @@ test_read_team_port (void) const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }"; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -14365,7 +13588,7 @@ test_write_team_port (void) nm_connection_normalize (connection, NULL, NULL, NULL); /* re-read the connection for comparison */ - reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL, + reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); unlink (testfile); g_assert_no_error (error); @@ -14391,7 +13614,7 @@ test_read_team_port_empty_config (void) GError *error = NULL; connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port-empty-config", - NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, &error, NULL); g_assert_no_error (error); g_assert (connection); @@ -14559,11 +13782,11 @@ int main (int argc, char **argv) test_read_wired_dhcp (); g_test_add_func (TPATH "dhcp-plus-ip", test_read_wired_dhcp_plus_ip); g_test_add_func (TPATH "dhcp-send-hostname", test_read_write_wired_dhcp_send_hostname); - test_read_wired_global_gateway (); - test_read_wired_never_default (); + g_test_add_func (TPATH "global-gateway", test_read_wired_global_gateway); + g_test_add_func (TPATH "never-default", test_read_wired_never_default); test_read_wired_defroute_no (); test_read_wired_defroute_no_gatewaydev_yes (); - test_read_wired_static_routes (); + g_test_add_func (TPATH "routes/read-static", test_read_wired_static_routes); test_read_wired_static_routes_legacy (); test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_1, "System test-wired-ipv4-manual-1"); test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_2, "System test-wired-ipv4-manual-2"); @@ -14699,14 +13922,9 @@ int main (int argc, char **argv) test_write_ethernet_missing_ipv6 (); /* iSCSI / ibft */ - test_read_ibft_dhcp (); - test_read_ibft_static (); - test_read_ibft_malformed ("ibft-bad-record-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-record", FALSE); - test_read_ibft_malformed ("ibft-bad-entry-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-entry", TRUE); - test_read_ibft_malformed ("ibft-bad-ipaddr-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-ipaddr", TRUE); - test_read_ibft_malformed ("ibft-bad-gateway-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-gateway", TRUE); - test_read_ibft_malformed ("ibft-bad-dns1-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns1", TRUE); - test_read_ibft_malformed ("ibft-bad-dns2-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns2", TRUE); + g_test_add_func (TPATH "ibft/ignored", test_read_ibft_ignored); + + /* Data Center Bridging (DCB) */ g_test_add_func (TPATH "dcb/read-basic", test_read_dcb_basic); g_test_add_func (TPATH "dcb/write-basic", test_write_dcb_basic); g_test_add_func (TPATH "dcb/default-app-priorities", test_read_dcb_default_app_priorities); |