mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-04 15:21:12 +00:00
initrd: add iBFT reader
This is loosely based on nms-ibft-reader, but with some significant changes. Notably, it parses /sys/firmware/ibft directly instead of iscsiadm output. iscsiadm is not available on early boot (perhaps it's too large) and turns out that parsing sysfs directly is easier and more straightforwared anyways. A win-win situation. It is not useful alone, it's in a separate commit just for the sake of easier review.
This commit is contained in:
parent
c263f5355c
commit
b544f7243d
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -252,6 +252,7 @@ test-*.trs
|
|||
/src/dhcp/tests/test-dhcp-options
|
||||
/src/dhcp/tests/test-dhcp-utils
|
||||
/src/dnsmasq/tests/test-dnsmasq-utils
|
||||
/src/initrd/tests/test-ibft-reader
|
||||
/src/nm-iface-helper
|
||||
/src/ndisc/tests/test-ndisc-fake
|
||||
/src/ndisc/tests/test-ndisc-linux
|
||||
|
|
244
Makefile.am
244
Makefile.am
|
@ -1925,6 +1925,250 @@ $(src_nm_iface_helper_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
|
|||
|
||||
###############################################################################
|
||||
|
||||
noinst_LTLIBRARIES += src/initrd/libnmi-core.la
|
||||
|
||||
src_initrd_libnmi_core_la_CPPFLAGS = \
|
||||
$(src_cppflags)
|
||||
|
||||
src_initrd_libnmi_core_la_SOURCES = \
|
||||
src/initrd/nm-initrd-generator.h \
|
||||
src/initrd/nmi-ibft-reader.c \
|
||||
$(NULL)
|
||||
|
||||
check_programs += src/initrd/tests/test-ibft-reader
|
||||
|
||||
src_initrd_tests_test_ibft_reader_CPPFLAGS = \
|
||||
-DNETWORKMANAGER_COMPILATION_TEST \
|
||||
-DTEST_INITRD_DIR=\"$(abs_srcdir)/src/initrd/tests\" \
|
||||
$(src_cppflags)
|
||||
|
||||
src_initrd_tests_test_ibft_reader_LDFLAGS = \
|
||||
$(CODE_COVERAGE_LDFLAGS) \
|
||||
$(SANITIZER_EXEC_LDFLAGS)
|
||||
|
||||
src_initrd_tests_test_ibft_reader_LDADD = \
|
||||
libnm-core/libnm-core.la \
|
||||
src/initrd/libnmi-core.la \
|
||||
src/libNetworkManagerTest.la \
|
||||
$(GLIB_LIBS)
|
||||
|
||||
EXTRA_DIST += \
|
||||
src/initrd/tests/sysfs/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs/class/net/eth2/address \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/hostname \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/dhcp \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet0/flags \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/isns-server \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/pri-radius-server \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/slp-server \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/sec-radius-server \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/index \
|
||||
src/initrd/tests/sysfs/firmware/ibft/initiator/flags \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/nic-assoc \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/chap-type \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/flags \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/target-name \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/nic-assoc \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/ip-addr \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/chap-type \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/index \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/lun \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/flags \
|
||||
src/initrd/tests/sysfs/firmware/ibft/target2/port \
|
||||
src/initrd/tests/sysfs/firmware/ibft/acpi_header/oem_table_id \
|
||||
src/initrd/tests/sysfs/firmware/ibft/acpi_header/oem_id \
|
||||
src/initrd/tests/sysfs/firmware/ibft/acpi_header/signature \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/prefix-len \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/hostname \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/gateway \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/mac \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/vlan \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/primary-dns \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/dhcp \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/origin \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/secondary-dns \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/ip-addr \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/subnet-mask \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/index \
|
||||
src/initrd/tests/sysfs/firmware/ibft/ethernet2/flags \
|
||||
src/initrd/tests/sysfs-bad-dns1/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-bad-dns1/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs-bad-dns2/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-bad-dns2/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs-bad-gateway/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-bad-gateway/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-bad-ipaddr/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs-dhcp/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-dhcp/class/net/eth1/address \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/gateway \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/mac \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/vlan \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/primary-dns \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/origin \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/secondary-dns \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/index \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/target-name \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/ip-addr \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/index \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/lun \
|
||||
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/port \
|
||||
src/initrd/tests/sysfs-static/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-static/class/net/eth1/address \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/gateway \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/primary-dns \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/secondary-dns \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target0/port \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/gateway \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/mac \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/vlan \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/primary-dns \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/origin \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/secondary-dns \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/ethernet1/index \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target1/target-name \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target1/ip-addr \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target1/index \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target1/lun \
|
||||
src/initrd/tests/sysfs-static/firmware/ibft/target1/port \
|
||||
src/initrd/tests/sysfs-vlan/class/net/eth0/address \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/prefix-len \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/mac \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/vlan \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/origin \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/ip-addr \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/subnet-mask \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/ethernet0/index \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/initiator/initiator-name \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/target0/target-name \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/target0/ip-addr \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/target0/index \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/target0/lun \
|
||||
src/initrd/tests/sysfs-vlan/firmware/ibft/target0/port \
|
||||
$(NULL)
|
||||
|
||||
check_programs += src/initrd/tests/test-cmdline-reader
|
||||
|
||||
src_initrd_tests_test_cmdline_reader_CPPFLAGS = \
|
||||
-DNETWORKMANAGER_COMPILATION_TEST \
|
||||
-DTEST_INITRD_DIR=\"$(abs_srcdir)/src/initrd/tests\" \
|
||||
$(src_cppflags)
|
||||
|
||||
src_initrd_tests_test_cmdline_reader_LDFLAGS = \
|
||||
$(CODE_COVERAGE_LDFLAGS) \
|
||||
$(SANITIZER_EXEC_LDFLAGS)
|
||||
|
||||
src_initrd_tests_test_cmdline_reader_LDADD = \
|
||||
libnm-core/libnm-core.la \
|
||||
src/initrd/libnmi-core.la \
|
||||
src/libNetworkManagerTest.la \
|
||||
$(GLIB_LIBS)
|
||||
|
||||
$(src_initrd_libnmi_core_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
|
||||
$(src_initrd_tests_test_ibft_reader_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
|
||||
|
||||
###############################################################################
|
||||
|
||||
EXTRA_DIST += \
|
||||
src/org.freedesktop.NetworkManager.conf \
|
||||
src/nm-test-utils-core.h \
|
||||
|
|
45
src/initrd/nm-initrd-generator.h
Normal file
45
src/initrd/nm-initrd-generator.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
/* NetworkManager initrd configuration generator
|
||||
*
|
||||
* 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 (C) 2014, 2018 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NM_INITRD_GENERATOR_H__
|
||||
#define __NM_INITRD_GENERATOR_H__
|
||||
|
||||
#include "nm-connection.h"
|
||||
#include "nm-utils.h"
|
||||
|
||||
static inline gboolean
|
||||
guess_ip_address_family (const char *str)
|
||||
{
|
||||
if (str == NULL)
|
||||
return AF_UNSPEC;
|
||||
else if (strchr (str, '.'))
|
||||
return AF_INET;
|
||||
else if (strchr (str, ':'))
|
||||
return AF_INET6;
|
||||
else
|
||||
return AF_UNSPEC;
|
||||
}
|
||||
|
||||
GHashTable *nmi_ibft_read (const char *sysfs_dir);
|
||||
|
||||
gboolean nmi_ibft_update_connection_from_nic (NMConnection *connection, GHashTable *nic, GError **error);
|
||||
|
||||
GHashTable *nmi_cmdline_reader_parse (const char *sysfs_dir, char **argv);
|
||||
|
||||
#endif /* __NM_INITRD_GENERATOR_H__ */
|
441
src/initrd/nmi-ibft-reader.c
Normal file
441
src/initrd/nmi-ibft-reader.c
Normal file
|
@ -0,0 +1,441 @@
|
|||
/* NetworkManager initrd configuration generator
|
||||
*
|
||||
* 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 - 2018 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-initrd-generator.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 "nm-core-internal.h"
|
||||
#include "platform/nm-platform.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _NMLOG(level, domain, ...) \
|
||||
nm_log ((level), (domain), NULL, NULL, \
|
||||
"ibft-reader: " _NM_UTILS_MACRO_FIRST (__VA_ARGS__) \
|
||||
_NM_UTILS_MACRO_REST (__VA_ARGS__))
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static GHashTable *
|
||||
load_one_nic (const char *sysfs_dir, const char *dir_name)
|
||||
{
|
||||
gs_free char *nic_path = g_build_filename (sysfs_dir, dir_name, NULL);
|
||||
GDir *nic_dir;
|
||||
const char *entry_name;
|
||||
char *content;
|
||||
gs_free_error GError *error = NULL;
|
||||
GHashTable *nic;
|
||||
|
||||
g_return_val_if_fail (sysfs_dir != NULL, FALSE);
|
||||
|
||||
nic_dir = g_dir_open (nic_path, 0, &error);
|
||||
if (!nic_dir) {
|
||||
_LOGW (LOGD_CORE, "Can't open %s: %s", nic_path, error->message);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
nic = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free);
|
||||
while ((entry_name = g_dir_read_name (nic_dir))) {
|
||||
gs_free char *entry_path = g_build_filename (nic_path, entry_name, NULL);
|
||||
|
||||
if (!g_file_test (entry_path, G_FILE_TEST_IS_REGULAR))
|
||||
continue;
|
||||
|
||||
if (!g_file_get_contents (entry_path, &content, NULL, &error)) {
|
||||
_LOGW (LOGD_CORE, "Can't read %s: %s", entry_path, error->message);
|
||||
g_clear_error (&error);
|
||||
continue;
|
||||
}
|
||||
|
||||
g_strchomp (content);
|
||||
if (!g_hash_table_insert (nic, g_strdup (entry_name), content))
|
||||
_LOGW (LOGD_CORE, "Duplicate iBFT entry: %s", entry_name);
|
||||
}
|
||||
|
||||
g_dir_close (nic_dir);
|
||||
|
||||
return nic;
|
||||
}
|
||||
|
||||
GHashTable *
|
||||
nmi_ibft_read (const char *sysfs_dir)
|
||||
{
|
||||
gs_free char *ibft_path = NULL;
|
||||
GDir *ibft_dir;
|
||||
const char *dir_name;
|
||||
GHashTable *ibft, *nic;
|
||||
char *mac;
|
||||
gs_free_error GError *error = NULL;
|
||||
|
||||
g_return_val_if_fail (sysfs_dir != NULL, FALSE);
|
||||
|
||||
ibft_path = g_build_filename (sysfs_dir, "firmware", "ibft", NULL);
|
||||
|
||||
ibft = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free,
|
||||
(GDestroyNotify) g_hash_table_unref);
|
||||
|
||||
if (!g_file_test (ibft_path, G_FILE_TEST_IS_DIR))
|
||||
nm_utils_modprobe (NULL, FALSE, "iscsi_ibft", NULL);
|
||||
if (!g_file_test (ibft_path, G_FILE_TEST_IS_DIR))
|
||||
return ibft;
|
||||
|
||||
ibft_dir = g_dir_open (ibft_path, 0, &error);
|
||||
if (!ibft_dir) {
|
||||
_LOGW (LOGD_CORE, "Unable to open iBFT firmware directory: %s", error->message);
|
||||
return ibft;
|
||||
}
|
||||
|
||||
while ((dir_name = g_dir_read_name (ibft_dir))) {
|
||||
if (!g_str_has_prefix (dir_name, "ethernet"))
|
||||
continue;
|
||||
|
||||
nic = load_one_nic (ibft_path, dir_name);
|
||||
mac = g_hash_table_lookup (nic, "mac");
|
||||
|
||||
if (!mac) {
|
||||
_LOGW (LOGD_CORE, "Ignoring an iBFT record without a MAC address");
|
||||
g_hash_table_unref (nic);
|
||||
continue;
|
||||
}
|
||||
|
||||
mac = g_ascii_strup (mac, -1);
|
||||
if (!g_hash_table_insert (ibft, mac, nic))
|
||||
_LOGW (LOGD_CORE, "Duplicate iBFT record for %s", mac);
|
||||
}
|
||||
|
||||
g_dir_close (ibft_dir);
|
||||
|
||||
return ibft;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ip_setting_add_from_block (GHashTable *nic,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
{
|
||||
NMSettingIPConfig *s_ip = NULL;
|
||||
NMSettingIPConfig *s_ip4 = NULL;
|
||||
NMSettingIPConfig *s_ip6 = NULL;
|
||||
NMIPAddress *addr;
|
||||
const char *s_ipaddr = NULL;
|
||||
const char *s_prefix = NULL;
|
||||
const char *s_gateway = NULL;
|
||||
const char *s_dns1 = NULL;
|
||||
const char *s_dns2 = NULL;
|
||||
const char *s_origin = NULL;
|
||||
const char *method = NULL;
|
||||
int family;
|
||||
gint64 prefix;
|
||||
|
||||
s_ipaddr = (const char *)g_hash_table_lookup (nic, "ip-addr");
|
||||
s_prefix = (const char *)g_hash_table_lookup (nic, "prefix-len");
|
||||
s_gateway = (const char *)g_hash_table_lookup (nic, "gateway");
|
||||
s_dns1 = (const char *)g_hash_table_lookup (nic, "primary-dns");
|
||||
s_dns2 = (const char *)g_hash_table_lookup (nic, "secondary-dns");
|
||||
s_origin = (const char *)g_hash_table_lookup (nic, "origin");
|
||||
|
||||
s_ip4 = nm_connection_get_setting_ip4_config (connection);
|
||||
if (!s_ip4) {
|
||||
s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
|
||||
nm_connection_add_setting (connection, (NMSetting *) s_ip4);
|
||||
}
|
||||
|
||||
s_ip6 = nm_connection_get_setting_ip6_config (connection);
|
||||
if (!s_ip6) {
|
||||
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
|
||||
nm_connection_add_setting (connection, (NMSetting *) s_ip6);
|
||||
}
|
||||
|
||||
family = guess_ip_address_family (s_ipaddr);
|
||||
if (family == AF_UNSPEC)
|
||||
family = guess_ip_address_family (s_gateway);
|
||||
|
||||
switch (family) {
|
||||
case AF_INET:
|
||||
s_ip = s_ip4;
|
||||
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_METHOD,
|
||||
NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
|
||||
break;
|
||||
case AF_INET6:
|
||||
s_ip = s_ip6;
|
||||
g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD,
|
||||
NM_SETTING_IP4_CONFIG_METHOD_DISABLED, NULL);
|
||||
break;
|
||||
default:
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: invalid IP address '%s'.",
|
||||
s_ipaddr);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( (g_strcmp0 (s_origin, "3") == 0 && family == AF_INET)
|
||||
|| (g_strcmp0 (s_origin, "4") == 0 && family == AF_INET)) {
|
||||
method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
|
||||
} else if (g_strcmp0 (s_origin, "3") == 0 && family == AF_INET6) {
|
||||
method = NM_SETTING_IP6_CONFIG_METHOD_DHCP;
|
||||
} else if (g_strcmp0 (s_origin, "4") == 0 && family == AF_INET6) {
|
||||
method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
|
||||
} else if (family == AF_INET) {
|
||||
method = NM_SETTING_IP4_CONFIG_METHOD_MANUAL;
|
||||
} else if (family == AF_INET6) {
|
||||
method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
|
||||
} else {
|
||||
g_return_val_if_reached (FALSE);
|
||||
}
|
||||
g_object_set (s_ip,
|
||||
NM_SETTING_IP_CONFIG_METHOD, method,
|
||||
NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
|
||||
NULL);
|
||||
|
||||
if (s_gateway && !nm_utils_ipaddr_valid (family, s_gateway)) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: invalid IP gateway '%s'.", s_gateway);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (s_dns1 && !nm_utils_ipaddr_valid (family, s_dns1)) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: invalid DNS1 address '%s'.", s_dns1);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (s_dns2 && !nm_utils_ipaddr_valid (family, s_dns2)) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: invalid DNS2 address '%s'.", s_dns2);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (s_ipaddr) {
|
||||
prefix = _nm_utils_ascii_str_to_int64 (s_prefix, 10, 0, 128, -1);
|
||||
if (prefix == -1) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: invalid IP prefix '%s'.", s_prefix);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
addr = nm_ip_address_new (family, s_ipaddr, prefix, error);
|
||||
if (!addr) {
|
||||
g_prefix_error (error, "iBFT: ");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
nm_setting_ip_config_add_address (s_ip, addr);
|
||||
nm_ip_address_unref (addr);
|
||||
|
||||
g_object_set (s_ip, NM_SETTING_IP_CONFIG_GATEWAY, s_gateway, NULL);
|
||||
}
|
||||
|
||||
if (s_dns1)
|
||||
nm_setting_ip_config_add_dns (s_ip, s_dns1);
|
||||
if (s_dns2)
|
||||
nm_setting_ip_config_add_dns (s_ip, s_dns2);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
connection_setting_add (GHashTable *nic,
|
||||
NMConnection *connection,
|
||||
const char *type,
|
||||
const char *prefix,
|
||||
GError **error)
|
||||
{
|
||||
NMSetting *s_con;
|
||||
char *id, *uuid;
|
||||
const char *s_index, *s_hwaddr, *s_ipaddr, *s_vlanid;
|
||||
|
||||
s_index = (const char *)g_hash_table_lookup (nic, "index");
|
||||
s_hwaddr = (const char *)g_hash_table_lookup (nic, "mac");
|
||||
s_ipaddr = (const char *)g_hash_table_lookup (nic, "ip-addr");
|
||||
s_vlanid = (const char *)g_hash_table_lookup (nic, "vlan");
|
||||
|
||||
if (!s_hwaddr) {
|
||||
g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: missing MAC address");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
id = g_strdup_printf ("iBFT%s%s Connection%s%s",
|
||||
prefix ? " " : "",
|
||||
prefix ? prefix : "",
|
||||
s_index ? " " : "",
|
||||
s_index ? s_index : "");
|
||||
|
||||
uuid = _nm_utils_uuid_generate_from_strings ("ibft",
|
||||
s_hwaddr,
|
||||
s_vlanid ? "V" : "v",
|
||||
s_vlanid ? s_vlanid : "",
|
||||
s_ipaddr ? "A" : "DHCP",
|
||||
s_ipaddr ? s_ipaddr : "",
|
||||
NULL);
|
||||
|
||||
s_con = (NMSetting *) nm_connection_get_setting_connection (connection);
|
||||
if (!s_con) {
|
||||
s_con = nm_setting_connection_new ();
|
||||
nm_connection_add_setting (connection, s_con);
|
||||
}
|
||||
|
||||
g_object_set (s_con,
|
||||
NM_SETTING_CONNECTION_TYPE, type,
|
||||
NM_SETTING_CONNECTION_UUID, uuid,
|
||||
NM_SETTING_CONNECTION_ID, id,
|
||||
NULL);
|
||||
|
||||
g_free (uuid);
|
||||
g_free (id);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_ibft_vlan_device (GHashTable *nic)
|
||||
{
|
||||
const char *s_vlan_id;
|
||||
|
||||
g_assert (nic);
|
||||
|
||||
s_vlan_id = (const char *)g_hash_table_lookup (nic, "vlan");
|
||||
|
||||
if (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 (GHashTable *nic,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
{
|
||||
NMSetting *s_vlan = NULL;
|
||||
const char *vlan_id_str = NULL;
|
||||
gint64 vlan_id = -1;
|
||||
|
||||
g_assert (nic);
|
||||
g_assert (connection);
|
||||
|
||||
/* This won't fail since this function shouldn't be called unless the
|
||||
* iBFT VLAN ID exists and is > 0.
|
||||
*/
|
||||
vlan_id_str = (const char *)g_hash_table_lookup (nic, "vlan");
|
||||
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, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"Invalid VLAN_ID '%s'", vlan_id_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s_vlan = (NMSetting *) nm_connection_get_setting_vlan (connection);
|
||||
if (!s_vlan) {
|
||||
s_vlan = nm_setting_vlan_new ();
|
||||
nm_connection_add_setting (connection, s_vlan);
|
||||
}
|
||||
|
||||
g_object_set (s_vlan, NM_SETTING_VLAN_ID, (guint32) vlan_id, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
wired_setting_add_from_block (GHashTable *nic,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
{
|
||||
NMSetting *s_wired = NULL;
|
||||
const char *hwaddr = NULL;
|
||||
|
||||
g_assert (nic);
|
||||
g_assert (connection);
|
||||
|
||||
|
||||
hwaddr = (const char *)g_hash_table_lookup (nic, "mac");
|
||||
if (!hwaddr) {
|
||||
g_set_error_literal (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: missing MAC address");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) {
|
||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
|
||||
"iBFT: invalid MAC address '%s'.", hwaddr);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s_wired = (NMSetting *) nm_connection_get_setting_wired (connection);
|
||||
if (!s_wired) {
|
||||
s_wired = nm_setting_wired_new ();
|
||||
nm_connection_add_setting (connection, s_wired);
|
||||
}
|
||||
|
||||
g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, hwaddr, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nmi_ibft_update_connection_from_nic (NMConnection *connection, GHashTable *nic, GError **error)
|
||||
{
|
||||
gboolean is_vlan = FALSE;
|
||||
|
||||
g_assert (nic);
|
||||
|
||||
is_vlan = is_ibft_vlan_device (nic);
|
||||
if (is_vlan && !vlan_setting_add_from_block (nic, connection, error))
|
||||
return FALSE;
|
||||
|
||||
/* Always have a wired setting; for VLAN it defines the parent */
|
||||
if (!wired_setting_add_from_block (nic, connection, error))
|
||||
return FALSE;
|
||||
|
||||
if (!ip_setting_add_from_block (nic, connection, error))
|
||||
return FALSE;
|
||||
|
||||
if (!connection_setting_add (nic,
|
||||
connection,
|
||||
is_vlan ? NM_SETTING_VLAN_SETTING_NAME : NM_SETTING_WIRED_SETTING_NAME,
|
||||
is_vlan ? "VLAN" : NULL,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
if (!nm_connection_normalize (connection, NULL, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
22
src/initrd/tests/meson.build
Normal file
22
src/initrd/tests/meson.build
Normal file
|
@ -0,0 +1,22 @@
|
|||
test_unit = 'test-ibft'
|
||||
|
||||
test_ibft_dir = meson.current_source_dir()
|
||||
|
||||
cflags = [
|
||||
'-DTEST_IBFT_DIR="@0@"'.format(test_ibft_dir),
|
||||
'-DTEST_SCRATCH_DIR="@0@"'.format(test_ibft_dir)
|
||||
]
|
||||
|
||||
exe = executable(
|
||||
test_unit,
|
||||
test_unit + '.c',
|
||||
dependencies: test_nm_dep,
|
||||
c_args: cflags,
|
||||
link_with: libnmi_ibft_core
|
||||
)
|
||||
|
||||
test(
|
||||
'ibft/' + test_unit,
|
||||
test_script,
|
||||
args: test_args + [exe.full_path()]
|
||||
)
|
1
src/initrd/tests/sysfs-bad-dns1/class/net/eth0/address
Normal file
1
src/initrd/tests/sysfs-bad-dns1/class/net/eth0/address
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
192.168.35.254
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
192.168.32.72
|
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
22
|
|
@ -0,0 +1 @@
|
|||
10000.500.250.1
|
|
@ -0,0 +1 @@
|
|||
10.16.255.3
|
|
@ -0,0 +1 @@
|
|||
255.255.252.0
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
iqn.pjones6
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
10.16.52.16
|
|
@ -0,0 +1 @@
|
|||
00000000
|
|
@ -0,0 +1 @@
|
|||
3260
|
|
@ -0,0 +1 @@
|
|||
iqn.0.2008-11.com.blahblah:iscsi0
|
1
src/initrd/tests/sysfs-bad-dns2/class/net/eth0/address
Normal file
1
src/initrd/tests/sysfs-bad-dns2/class/net/eth0/address
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
192.168.35.254
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
192.168.32.72
|
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
22
|
|
@ -0,0 +1 @@
|
|||
10.16.255.2
|
|
@ -0,0 +1 @@
|
|||
blah.foo.bar.baz
|
|
@ -0,0 +1 @@
|
|||
255.255.252.0
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
iqn.pjones6
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
10.16.52.16
|
|
@ -0,0 +1 @@
|
|||
00000000
|
|
@ -0,0 +1 @@
|
|||
3260
|
|
@ -0,0 +1 @@
|
|||
iqn.0.2008-11.com.blahblah:iscsi0
|
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
bb.cc.dd.ee
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
192.168.32.72
|
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
22
|
|
@ -0,0 +1 @@
|
|||
10.16.255.2
|
|
@ -0,0 +1 @@
|
|||
10.16.255.3
|
|
@ -0,0 +1 @@
|
|||
255.255.252.0
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
iqn.pjones6
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
10.16.52.16
|
|
@ -0,0 +1 @@
|
|||
00000000
|
|
@ -0,0 +1 @@
|
|||
3260
|
|
@ -0,0 +1 @@
|
|||
iqn.0.2008-11.com.blahblah:iscsi0
|
1
src/initrd/tests/sysfs-bad-ipaddr/class/net/eth0/address
Normal file
1
src/initrd/tests/sysfs-bad-ipaddr/class/net/eth0/address
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
192.168.35.254
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
aa.bb.cc.dd
|
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
22
|
|
@ -0,0 +1 @@
|
|||
10.16.255.2
|
|
@ -0,0 +1 @@
|
|||
10.16.255.3
|
|
@ -0,0 +1 @@
|
|||
255.255.252.0
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
iqn.pjones6
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
10.16.52.16
|
|
@ -0,0 +1 @@
|
|||
00000000
|
|
@ -0,0 +1 @@
|
|||
3260
|
|
@ -0,0 +1 @@
|
|||
iqn.0.2008-11.com.blahblah:iscsi0
|
1
src/initrd/tests/sysfs-dhcp/class/net/eth0/address
Normal file
1
src/initrd/tests/sysfs-dhcp/class/net/eth0/address
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
1
src/initrd/tests/sysfs-dhcp/class/net/eth1/address
Normal file
1
src/initrd/tests/sysfs-dhcp/class/net/eth1/address
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f1
|
|
@ -0,0 +1 @@
|
|||
10.16.52.254
|
|
@ -0,0 +1 @@
|
|||
0
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/mac
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/mac
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f0
|
|
@ -0,0 +1 @@
|
|||
3
|
|
@ -0,0 +1 @@
|
|||
10.16.255.2
|
|
@ -0,0 +1 @@
|
|||
10.16.255.3
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/vlan
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet0/vlan
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
10.16.52.254
|
|
@ -0,0 +1 @@
|
|||
1
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/mac
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/mac
Normal file
|
@ -0,0 +1 @@
|
|||
00:33:21:98:b9:f1
|
|
@ -0,0 +1 @@
|
|||
3
|
|
@ -0,0 +1 @@
|
|||
10.16.255.2
|
|
@ -0,0 +1 @@
|
|||
10.16.255.3
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/vlan
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/ethernet1/vlan
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
iqn.pjones6
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/index
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/index
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1 @@
|
|||
10.16.52.16
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/lun
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/lun
Normal file
|
@ -0,0 +1 @@
|
|||
00000000
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/port
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target0/port
Normal file
|
@ -0,0 +1 @@
|
|||
3260
|
|
@ -0,0 +1 @@
|
|||
iqn.0.2008-11.com.blahblah:iscsi0
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/index
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/index
Normal file
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1 @@
|
|||
10.16.52.16
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/lun
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/lun
Normal file
|
@ -0,0 +1 @@
|
|||
00000000
|
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/port
Normal file
1
src/initrd/tests/sysfs-dhcp/firmware/ibft/target1/port
Normal file
|
@ -0,0 +1 @@
|
|||
3260
|
|
@ -0,0 +1 @@
|
|||
iqn.1.2008-11.com.blahblah:iscsi1
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue