Add iSCSI IBFT support (v0.4.5) - fixes to the header files.
Subsystems (2)
PATCH 1/1 Add iSCSI IBFT support (v0.4.5) - fixes to the header files.
This patch (v0.4.5) adds /sysfs/firmware/ibft/[initiator|targetX|ethernetX] directories along with text properties which export the the iSCSI Boot Firmware Table (iBFT) structure.
What is iSCSI Boot Firmware Table? It is a mechanism for the iSCSI tools to extract from the machine NICs the iSCSI connection information so that they can automagically mount the iSCSI share/target. Currently the iSCSI information is hard-coded in the initrd. The /sysfs entries are read-only one-name-and-value fields.
The usual set of data exposed is:
# for a in `find /sys/firmware/ibft/ -type f -print`; do echo -n "$a: "; cat $a; done /sys/firmware/ibft/target0/target-name: iqn.2007.com.intel-sbx44:storage-10gb /sys/firmware/ibft/target0/nic-assoc: 0 /sys/firmware/ibft/target0/chap-type: 0 /sys/firmware/ibft/target0/lun: 00000000 /sys/firmware/ibft/target0/port: 3260 /sys/firmware/ibft/target0/ip-addr: 192.168.79.116 /sys/firmware/ibft/target0/flags: 3 /sys/firmware/ibft/target0/index: 0 /sys/firmware/ibft/ethernet0/mac: 00:11:25:9d:8b:01 /sys/firmware/ibft/ethernet0/vlan: 0 /sys/firmware/ibft/ethernet0/gateway: 192.168.79.254 /sys/firmware/ibft/ethernet0/origin: 0 /sys/firmware/ibft/ethernet0/subnet-mask: 255.255.252.0 /sys/firmware/ibft/ethernet0/ip-addr: 192.168.77.41 /sys/firmware/ibft/ethernet0/flags: 7 /sys/firmware/ibft/ethernet0/index: 0 /sys/firmware/ibft/initiator/initiator-name: iqn.2007-07.com:konrad.initiator /sys/firmware/ibft/initiator/flags: 3 /sys/firmware/ibft/initiator/index: 0
For full details of the IBFT structure please take a look at:
ftp://ftp.software.ibm.com/systems/support/system_x_pdf/ibm_iscsi_boot_firmware_table_v1.02.pdf
Please note that this patch depends on the Greg KH patches tree kobject changes.
---
Documentation/ABI/testing/sysfs-ibft | 23 arch/x86/kernel/setup_32.c | 3 arch/x86/kernel/setup_64.c | 4 drivers/firmware/Kconfig | 19 drivers/firmware/Makefile | 2 drivers/firmware/iscsi_ibft.c | 975 +++++++++++++++++++++++++++++++++++ drivers/firmware/iscsi_ibft_find.c | 77 ++ include/linux/iscsi_ibft.h | 52 + 8 files changed, 1155 insertions(+)
Documentation/ABI/testing/sysfs-ibft new file +23 -0
@@ -0,0 +1,23 @@ +What: /sys/firmware/ibft/initiator +Date: November 2007 +Contact: Konrad Rzeszutek <[email protected]> +Description: The /sys/firmware/ibft/initiator directory will contain + files that expose the iSCSI Boot Firmware Table initiator data. + Usually this contains the Initiator name. + +What: /sys/firmware/ibft/targetX +Date: November 2007 +Contact: Konrad Rzeszutek <[email protected]> +Description: The /sys/firmware/ibft/targetX directory will contain + files that expose the iSCSI Boot Firmware Table target data. + Usually this contains the target's IP address, boot LUN, + target name, and what NIC it is associated with. It can also + contain the CHAP name (and password), the reverse CHAP + name (and password) + +What: /sys/firmware/ibft/ethernetX +Date: November 2007 +Contact: Konrad Rzeszutek <[email protected]> +Description: The /sys/firmware/ibft/ethernetX directory will contain + files that expose the iSCSI Boot Firmware Table NIC data. + This can this can the IP address, MAC, and gateway of the NIC.
arch/x86/kernel/setup_32.c +3 -0
@@ -39,6 +39,7 @@#include <linux/efi.h> #include <linux/init.h> #include <linux/edd.h> +#include <linux/iscsi_ibft.h> #include <linux/nodemask.h> #include <linux/kexec.h> #include <linux/crash_dump.h>
@@ -496,6 +497,8 @@ void __init setup_bootmem_allocator(void) }#endif reserve_crashkernel (); + +reserve_ibft_region (); }/*
arch/x86/kernel/setup_64.c +4 -0
@@ -33,6 +33,7 @@#include <linux/acpi.h> #include <linux/kallsyms.h> #include <linux/edd.h> +#include <linux/iscsi_ibft.h> #include <linux/mmzone.h> #include <linux/kexec.h> #include <linux/cpufreq.h>
@@ -403,6 +404,9 @@ void __init setup_arch(char **cmdline_p) }#endif reserve_crashkernel (); + +reserve_ibft_region (); +paging_init ();#ifdef CONFIG_PCI
drivers/firmware/Kconfig +19 -0
@@ -93,4 +93,23 @@ config DMIID information from userspace through /sys/class/dmi/id/ or if you want DMI-based module auto-loading. +config ISCSI_IBFT_FIND + bool "iSCSI Boot Firmware Table Attributes" + default n + help + This option enables the kernel to find the region of memory + in which the ISCSI Boot Firmware Table (iBFT) resides. This + is necessary for iSCSI Boot Firmware Table Attributes module to work + properly. + +config ISCSI_IBFT + tristate "iSCSI Boot Firmware Table Attributes module" + depends on ISCSI_IBFT_FIND + default n + help + This option enables support for detection and exposing of iSCSI + Boot Firmware Table (iBFT) via sysfs to userspace. If you wish to + detect iSCSI boot parameters dynamically during system boot, say Y. + Otherwise, say N. + endmenu
drivers/firmware/Makefile +2 -0
@@ -8,3 +8,5 @@ obj-$(CONFIG_EFI_PCDP) += pcdp.o obj-$(CONFIG_DELL_RBU) += dell_rbu.o obj-$(CONFIG_DCDBAS) += dcdbas.o obj-$(CONFIG_DMIID) += dmi-id.o +obj-$(CONFIG_ISCSI_IBFT_FIND) += iscsi_ibft_find.o +obj-$(CONFIG_ISCSI_IBFT) += iscsi_ibft.o
drivers/firmware/iscsi_ibft.c new file +975 -0
975 lines not on this page · raw message
drivers/firmware/iscsi_ibft_find.c new file +77 -0
77 lines not on this page · raw message
include/linux/iscsi_ibft.h new file +52 -0
52 lines not on this page · raw message
Quoted 6 lines · Konrad Rzeszutek
drivers/firmware/iscsi_ibft.c new file +6
-0+/* +* Helper functions to parse data properly. +*/ +static ssize_t sprintf_ipaddr (char *buf,u8 *ip) +{ + if (ip[0] == 0 && ip[1] == 0 && ip[2] == 0 && ip[3] == 0 &&
drivers/firmware/iscsi_ibft.c line 285
Quoted 10 lines
drivers/firmware/iscsi_ibft.c new file +10
-0+ ip[4] == 0 && ip[5] == 0 && ip[6] == 0 && ip[7] == 0 && + ip[8] == 0 && ip[9] == 0 && ip[10] == 0xff && ip[11] == 0xff) { +/* +* IPV4 +*/ +return sprintf (buf,"%d.%d.%d.%d\n" , ip[12 ], + ip[13 ], ip[14 ], ip[15 ]); + } else + return 0; +}
You probably just want to use the NIPQUAD_FMT and NIP6_FMT macros here. Also why isn't ipv6 supported?
Quoted 11 lines · On Tuesday 29 January 2008 14:15:15 Mike Christie wrote:
Quoted 10 lines · Konrad Rzeszutek
drivers/firmware/iscsi_ibft.c new file +10
-0+/* +* Helper functions to parse data properly. +*/ +static ssize_t sprintf_ipaddr (char *buf,u8 *ip) +{ +if (ip[0 ] ==0 && ip[1 ] ==0 && ip[2 ] ==0 && ip[3 ] ==0 && + ip[4 ] ==0 && ip[5 ] ==0 && ip[6 ] ==0 && ip[7 ] ==0 && + ip[8 ] ==0 && ip[9 ] ==0 && ip[10 ] ==0xff && ip[11 ] ==0xff ) { +/* +* IPV4
Quoted 8 lines
drivers/firmware/iscsi_ibft.c line 285
Quoted 6 lines
drivers/firmware/iscsi_ibft.c new file +6
-0+*/ +return sprintf (buf,"%d.%d.%d.%d\n" , ip[12 ], + ip[13 ], ip[14 ], ip[15 ]); + }else +return 0 ; +}You probably just want to use the
NIPQUAD_FMTandNIP6_FMTmacros here.
Ah, I knew a macro like this _ought_ to be there somewhere. Thanks.
Quoted 1 line
Also why isn't ipv6 supported?
I didn't get to test the IPV6 yet so I didn't want to put in code that might have worked or not :-(