[packages/open-iscsi] - added patch with changes from upstream git - link daemons dynamic, no static kmod library

baggins baggins at pld-linux.org
Tue Apr 1 12:06:03 CEST 2014


commit 12da3c756e12f13b58c5e3bb84576893144aab08
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Tue Apr 1 11:40:24 2014 +0200

    - added patch with changes from upstream git
    - link daemons dynamic, no static kmod library

 iscsiuio.logrotate   |     8 +
 open-iscsi-git.patch | 35445 +++++++++++++++++++++++++++++++++++++++++++++++++
 open-iscsi.spec      |    65 +-
 3 files changed, 35496 insertions(+), 22 deletions(-)
---
diff --git a/open-iscsi.spec b/open-iscsi.spec
index da74320..a29d115 100644
--- a/open-iscsi.spec
+++ b/open-iscsi.spec
@@ -1,9 +1,5 @@
-# TODO
-# - /sbin/iscsistart is linked static, should it be linked uclibc/klibc-static for initrd?
-# - for use in /sbin only openslp should be static (or libslp moved to /lib)
-#
 # Conditional build:
-%bcond_with	dynamic		# link utilities dynamically
+%bcond_without	dynamic		# link utilities dynamically
 #
 %define		ver	2.0
 %define		subver	873
@@ -19,13 +15,17 @@ Source0:	http://www.open-iscsi.org/bits/%{name}-%{ver}-%{subver}.tar.gz
 Source1:	%{name}.init
 Source2:	%{name}.sysconfig
 Source3:	%{name}-devices.init
+Source4:	iscsiuio.logrotate
 Patch0:		%{name}-build.patch
+Patch1:		%{name}-git.patch
 URL:		http://www.open-iscsi.org/
+BuildRequires:	kmod-devel
 BuildRequires:	openssl-devel
 BuildRequires:	rpmbuild(macros) >= 1.379
 %if %{with dynamic}
 BuildRequires:	openslp-devel
 BuildRequires:	sed >= 4.0
+Requires:	openslp >= 2.0.0
 %else
 BuildRequires:	glibc-static
 BuildRequires:	openslp-static
@@ -58,42 +58,55 @@ informacji o protokole iSCSI znajduje się w standardach IETF na
 %prep
 %setup -q -n %{name}-%{ver}-%{subver}
 %patch0 -p1
+%patch1 -p1
 
 %if %{with dynamic}
 sed -i -e 's/-static //' usr/Makefile
 %endif
 
 %build
-cd utils/open-isns
+cd iscsiuio
+%{__libtoolize}
+%{__aclocal}
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+%configure
+
+cd ../utils/open-isns
 %configure \
 	--with-slp \
 	--without-security
-%{__make}
 cd ../..
-for i in utils/sysdeps utils/fwparam_ibft usr utils; do
-	%{__make} -C $i \
-		CC="%{__cc}" \
-		OPTFLAGS="%{rpmcflags} %{rpmcppflags}" \
-		IPC_FLAGS="-DNETLINK_ISCSI=8 -D_GNU_SOURCE" \
-		KSUBLEVEL=0 \
-		KSRC=/usr
-done
+%{__make} \
+	CC="%{__cc}" \
+	OPTFLAGS="%{rpmcflags} %{rpmcppflags} -DUSE_KMOD -lkmod" \
+	IPC_FLAGS="-DNETLINK_ISCSI=8 -D_GNU_SOURCE" \
+	KSUBLEVEL=0
 
 %install
 rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_sbindir},%{_mandir}/man8,%{_sysconfdir}/{iscsi/ifaces,iscsi/nodes,iscsi/send_targets},/etc/{rc.d/init.d,sysconfig}}
+install -d $RPM_BUILD_ROOT%{_sysconfdir}/iscsi/{nodes,send_targets,static,isns,slp,ifaces} \
+	$RPM_BUILD_ROOT/etc/{rc.d/init.d,sysconfig,logrotate.d} \
+	$RPM_BUILD_ROOT%{systemdunitdir} \
+	$RPM_BUILD_ROOT/lib/systemd/pld-helpers.d
+
+%{__make} install_programs install_doc install_etc \
+	DESTDIR=$RPM_BUILD_ROOT
+
+:> $RPM_BUILD_ROOT%{_sysconfdir}/iscsi/initiatorname.iscsi
 
 install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/iscsi
 install %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/iscsi
 install %{SOURCE3} $RPM_BUILD_ROOT/etc/rc.d/init.d/iscsi-devices
+install %{SOURCE4} $RPM_BUILD_ROOT/etc/logrotate.d/iscsiuio
 
-install etc/iscsid.conf $RPM_BUILD_ROOT%{_sysconfdir}/iscsi
-:> $RPM_BUILD_ROOT%{_sysconfdir}/iscsi/initiatorname.iscsi
-
-install usr/{iscsid,iscsiadm,iscsistart} $RPM_BUILD_ROOT%{_sbindir}
-install utils/iscsi{-iname,_discovery} $RPM_BUILD_ROOT%{_sbindir}
+install usr/iscsistart $RPM_BUILD_ROOT%{_sbindir}
+install doc/iscsistart.8 $RPM_BUILD_ROOT%{_mandir}/man8
+install doc/iscsi-iname.8 $RPM_BUILD_ROOT%{_mandir}/man8
 
-install doc/*.8 $RPM_BUILD_ROOT%{_mandir}/man8
+install etc/systemd/iscsid.service $RPM_BUILD_ROOT%{systemdunitdir}
+install etc/systemd/iscsid.socket $RPM_BUILD_ROOT%{systemdunitdir}
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -128,20 +141,28 @@ fi
 %doc Changelog README THANKS
 %dir %{_sysconfdir}/iscsi
 %dir %{_sysconfdir}/iscsi/ifaces
+%dir %{_sysconfdir}/iscsi/isns
 %dir %{_sysconfdir}/iscsi/nodes
 %dir %{_sysconfdir}/iscsi/send_targets
+%dir %{_sysconfdir}/iscsi/slp
+%dir %{_sysconfdir}/iscsi/static
 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/iscsi/iscsid.conf
 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/iscsi/initiatorname.iscsi
 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/iscsi
+%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/logrotate.d/iscsiuio
 %attr(754,root,root) /etc/rc.d/init.d/iscsi
 %attr(754,root,root) /etc/rc.d/init.d/iscsi-devices
+%{systemdunitdir}/iscsid.service
+%{systemdunitdir}/iscsid.socket
 %attr(755,root,root) %{_sbindir}/iscsi-iname
 %attr(755,root,root) %{_sbindir}/iscsiadm
 %attr(755,root,root) %{_sbindir}/iscsid
 %attr(755,root,root) %{_sbindir}/iscsistart
 %attr(755,root,root) %{_sbindir}/iscsi_discovery
+%attr(755,root,root) %{_sbindir}/iscsiuio
 %{_mandir}/man8/iscsi-iname.8*
 %{_mandir}/man8/iscsi_discovery.8*
 %{_mandir}/man8/iscsiadm.8*
 %{_mandir}/man8/iscsid.8*
 %{_mandir}/man8/iscsistart.8*
+%{_mandir}/man8/iscsiuio.8*
diff --git a/iscsiuio.logrotate b/iscsiuio.logrotate
new file mode 100644
index 0000000..ba9d418
--- /dev/null
+++ b/iscsiuio.logrotate
@@ -0,0 +1,8 @@
+/var/log/iscsiuio.log {
+	missingok
+	notifempty
+	sharedscripts
+	postrotate
+		/bin/killall -USR1 iscsiuio >/dev/null || :
+	endscript
+}
diff --git a/open-iscsi-git.patch b/open-iscsi-git.patch
new file mode 100644
index 0000000..3a06172
--- /dev/null
+++ b/open-iscsi-git.patch
@@ -0,0 +1,35445 @@
+diff --git a/Makefile b/Makefile
+index c5d9700..79bad84 100644
+--- a/Makefile
++++ b/Makefile
+@@ -14,8 +14,8 @@ mandir = $(prefix)/share/man
+ etcdir = /etc
+ initddir = $(etcdir)/init.d
+ 
+-MANPAGES = doc/iscsid.8 doc/iscsiadm.8 doc/iscsi_discovery.8
+-PROGRAMS = usr/iscsid usr/iscsiadm utils/iscsi_discovery utils/iscsi-iname
++MANPAGES = doc/iscsid.8 doc/iscsiadm.8 doc/iscsi_discovery.8 iscsiuio/docs/iscsiuio.8
++PROGRAMS = usr/iscsid usr/iscsiadm utils/iscsi_discovery utils/iscsi-iname iscsiuio/src/unix/iscsiuio
+ INSTALL = install
+ ETCFILES = etc/iscsid.conf
+ IFACEFILES = etc/iface.example
+@@ -26,24 +26,32 @@ IFACEFILES = etc/iface.example
+ 
+ all: user
+ 
+-user: utils/open-isns/Makefile
++user: utils/open-isns/Makefile iscsiuio/Makefile
+ 	$(MAKE) -C utils/open-isns
+ 	$(MAKE) -C utils/sysdeps
+ 	$(MAKE) -C utils/fwparam_ibft
+ 	$(MAKE) -C usr
+ 	$(MAKE) -C utils
++	$(MAKE) -C iscsiuio
+ 	@echo
+ 	@echo "Compilation complete                 Output file"
+ 	@echo "-----------------------------------  ----------------"
+ 	@echo "Built iSCSI daemon:                  usr/iscsid"
+ 	@echo "Built management application:        usr/iscsiadm"
+ 	@echo "Built boot tool:                     usr/iscsistart"
++	@echo "Built iscsiuio daemon:               iscsiuio/src/unix/iscsiuio"
+ 	@echo
+ 	@echo "Read README file for detailed information."
+ 
+ utils/open-isns/Makefile: utils/open-isns/configure utils/open-isns/Makefile.in
+ 	cd utils/open-isns; ./configure CFLAGS="$(OPTFLAGS)" --with-security=no
+ 
++iscsiuio/Makefile: iscsiuio/configure iscsiuio/Makefile.in
++	cd iscsiuio; ./configure
++
++iscsiuio/configure iscsiuio/Makefile.in: iscsiuio/configure.ac iscsiuio/Makefile.am
++	cd iscsiuio; autoreconf --install
++
+ kernel: force
+ 	$(MAKE) -C kernel
+ 	@echo "Kernel Compilation complete          Output file"
+@@ -61,6 +69,7 @@ clean:
+ 	$(MAKE) -C utils clean
+ 	$(MAKE) -C usr clean
+ 	$(MAKE) -C kernel clean
++	$(MAKE) -C iscsiuio clean
+ 	$(MAKE) -C utils/open-isns clean
+ 	$(MAKE) -C utils/open-isns distclean
+ 
+@@ -115,7 +124,7 @@ install_iface: $(IFACEFILES)
+ 	$(INSTALL) -m 644 $^ $(DESTDIR)$(etcdir)/iscsi/ifaces
+ 
+ install_etc: $(ETCFILES)
+-	if [ ! -f /etc/iscsi/iscsid.conf ]; then \
++	if [ ! -f $(DESTDIR)/etc/iscsi/iscsid.conf ]; then \
+ 		$(INSTALL) -d $(DESTDIR)$(etcdir)/iscsi ; \
+ 		$(INSTALL) -m 644 $^ $(DESTDIR)$(etcdir)/iscsi ; \
+ 	fi
+@@ -128,11 +137,11 @@ install_kernel:
+ 	$(MAKE) -C kernel install_kernel
+ 
+ install_iname:
+-	if [ ! -f /etc/iscsi/initiatorname.iscsi ]; then \
++	if [ ! -f $(DESTDIR)/etc/iscsi/initiatorname.iscsi ]; then \
+ 		echo "InitiatorName=`$(DESTDIR)/sbin/iscsi-iname`" > $(DESTDIR)/etc/iscsi/initiatorname.iscsi ; \
+ 		echo "***************************************************" ; \
+ 		echo "Setting InitiatorName to `cat $(DESTDIR)/etc/iscsi/initiatorname.iscsi`" ; \
+-		echo "To override edit /etc/iscsi/initiatorname.iscsi" ; \
++		echo "To override edit $(DESTDIR)/etc/iscsi/initiatorname.iscsi" ; \
+ 		echo "***************************************************" ; \
+ 	fi
+ 
+diff --git a/README b/README
+index 7364b2d..06d1b6f 100644
+--- a/README
++++ b/README
+@@ -159,15 +159,20 @@ Usage: iscsid [OPTION]
+ 5. Open-iSCSI Configuration Utility
+ ===================================
+ 
+-Open-iSCSI persistent configuration is implemented as a DBM database
+-available on all Linux installations.
++Open-iSCSI persistent configuration is stored in a number of
++directories under a configuration root directory, using a flat-file
++format. This configuration root directory is /etc/iscsi by default,
++but may also commonly be in /var/lib/iscsi.
+ 
+-The database contains two tables:
++Configuration is contained in directories for:
+ 
+-- Discovery table (/etc/iscsi/send_targets);
+-- Node table (/etc/iscsi/nodes).
+-
+-The regular place for iSCSI database files: /etc/iscsi/nodes
++- nodes
++- slp
++- isns
++- static
++- fw
++- send_targets
++- ifaces
+ 
+ The iscsiadm utility is a command-line tool to manage (update, delete,
+ insert, query) the persistent database.
+@@ -388,7 +393,7 @@ Usage: iscsiadm [OPTION]
+ 			  See below for examples.
+   -m iface --interface=iscsi_ifacename -C ping --ip=[ipaddr] --packetsize=[size]
+ 				--count=[count] --interval=[interval]
+-  -m host --host=hostno|MAC --print=level -C chap --op=[op] --value=[chap_tbl_idx]
++  -m host --host=hostno|MAC --print=level -C chap --op=[SHOW]
+ 			  Display information for a specific host. The host
+ 			  can be passed in by host number or by MAC address.
+ 			  If a host is not passed in then info
+@@ -401,6 +406,37 @@ Usage: iscsiadm [OPTION]
+ 			  is connected to.
+ 			  3 = Print iscsi params used.
+ 			  4 = Print SCSI info like LUNs, device state.
++  -m host --host=hostno|MAC -C chap --op=[DELETE] --index=[chap_tbl_idx]
++			   Delete chap entry at the given index from chap table.
++  -m host --host=hostno|MAC -C chap --op=[NEW | UPDATE] --index=[chap_tbl_idx] \
++				--name=[name] --value=[value]
++			  Add new or update existing chap entry at the given
++			  index with given username and password pair. If index
++			  is not passed then entry is added at the first free
++			  index in chap table.
++  -m host --host=hostno|MAC -C flashnode
++			  Display list of all the targets in adapter's
++			  flash (flash node), for the specified host,
++			  with ip, port, tpgt and iqn.
++  -m host --host=hostno|MAC -C flashnode --op=[NEW] --portal_type=[ipv4|ipv6]
++			  Create new flash node entry for the given host of the
++			  specified portal_type. This returns the index of the
++			  newly created entry on success.
++  -m host --host=hostno|MAC -C flashnode --index=[flashnode index] \
++				--op=[UPDATE] --name=[name] --value=[value]
++			  Update the params of the speficied flash node.
++			  The [name] and [value] pairs must be provided for the
++			  params that need to be updated. Multiple params can
++			  be updated using a single command.
++  -m host --host=hostno|MAC -C flashnode --index=[flashnode index] \
++				--op=[SHOW | DELETE | LOGIN | LOGOUT]
++			  op=DELETE|LOGIN|LOGOUT will perform deletion/login/
++			  logout operation on the specified flash node.
++
++			  op=SHOW will list all params with the values for the
++			  specified flash node. This is the default operation.
++
++			  See the iscsiadm example section for more info.
+   -d, --debug debuglevel  print debugging information
+   -V, --version           display version and exit
+   -h, --help              display this help and exit
+@@ -955,6 +991,96 @@ To now log into targets it is the same as with sofware iscsi. See section
+ 
+ 	    ./iscsiadm -m session -P 1
+ 
++
++    Host mode with flashnode submode:
++
++    - Display list of flash nodes for a host
++
++	    ./iscsiadm -m host -H 6 -C flashnode
++
++	This will print list of all the flash node entries for the given host 6
++	along with their ip, port, tpgt and iqn values.
++
++    - Display all parameters of a flash node entry for a host
++
++	    ./iscsiadm -m host -H 6 -C flashnode -x 0
++
++	This will list all the parameter name,value pairs for flash node entry at
++	index 0 of host 6.
++
++    - Add a new flash node entry for a host
++
++	    ./iscsiadm -m host -H 6 -C flashnode -o new -A ipv4
++	or
++	    ./iscsiadm -m host -H 6 -C flashnode -o new -A ipv6
++
++	This will add new flash node entry for the given host 6 with portal
++	type of either ipv4 or ipv6. The new operation returns the index of
++	the newly created flash node entry.
++
++    - Update a flashnode entry
++	    ./iscsiadm -m host -H 6 -C flashnode -x 1 -o update \
++		-n flashnode.conn[0].ipaddress -v 192.168.1.12 \
++		-n flashnode.session.targetname \
++		-v iqn.2002-03.com.compellent:5000d310004b0716
++
++	This will update the values of ipaddress and targetname params of
++	flash node entry at index 1 of host 6.
++
++    - Login to a flash node entry
++	    ./iscsiadm -m host -H 6 -C flashnode -x 1 -o login
++
++    - Logout from a flash node entry
++	    ./iscsiadm -m host -H 6 -C flashnode -x 1 -o logout
++	or
++	    ./iscsiadm -m session -r $sid -u
++
++	Logout can be performed either using the flash node index or using the
++	corresponding session index.
++
++    - Delete a flash node entry
++	    ./iscsiadm -m host -H 6 -C flashnode -x 1 -o delete
++
++    Host mode with chap submode:
++
++    - Display list of chap entries for a host
++
++	    ./iscsiadm -m host -H 6 -C chap -o show
++
++	This will list all the chap entries for the given host.
++
++    - Delete a chap entry for a host
++
++	    ./iscsiadm -m host -H 6 -C chap -o delete -x 5
++
++	This will delete any chap entry present at given index 5.
++
++    - Add/Update a local chap entry for a host
++
++	    ./iscsiadm -m host -H 6 -C chap -o update -x 4 -n username \
++			-v value -n password -v value
++
++	This will update the local chap entry present at index 4. If index 4
++	is free then entry of type local chap will be created at that index
++	with given username and password values.
++
++    - Add/Update a bidi chap entry for a host
++
++	    ./iscsiadm -m host -H 6 -C chap -o update -x 5 -n username_in \
++			-v value -n password_in -v value
++
++	This will update the bidi chap entry present at index 5. If index 5
++	is free then entry of type bidi chap will be created at that index
++	with given username_in and password_in values.
++
++    Host mode with stats submode:
++
++    - Display host statistics:
++	    ./iscsiadm -m host -H 6 -C stats
++
++	This will print the aggregate statistics on the host adapter port.
++	This includes MAC, TCP/IP, ECC & iSCSI statistics.
++
+ 6. Configuration
+ ================
+ 
+diff --git a/doc/iscsiadm.8 b/doc/iscsiadm.8
+index 7c209f6..9a945d1 100644
+--- a/doc/iscsiadm.8
++++ b/doc/iscsiadm.8
+@@ -14,9 +14,9 @@ iscsiadm \- open-iscsi administration utility
+ 
+ \fBiscsiadm\fR \-m iface [ \-hV ] [ \-d debug_level ] [ \-P printlevel ] [ \-I ifacename | \-H hostno|MAC ]   [ [ \-o  operation  ] [ \-n name ] [ \-v value ] ] [ \-C ping [ \-a ip ] [ \-b packetsize ] [ \-c count ] [ \-i interval ] ]
+ 
+-\fBiscsiadm\fR \-m fw [\-l]
++\fBiscsiadm\fR \-m fw [ \-d debug_level ] [\-l]
+ 
+-\fBiscsiadm\fR \-m host [ \-P printlevel ] [ \-H hostno|MAC ] [ -C chap [ -o operation ] [ -v chap_tbl_idx ] ]
++\fBiscsiadm\fR \-m host [ \-P printlevel ] [ \-H hostno|MAC ] [ [ \-C chap [ \-x chap_tbl_idx ] ] | [ \-C flashnode [ \-A portal_type ] [ \-x flashnode_idx ] ] | [ \-C stats ] ] [ [ \-o operation ] [ \-n name ] [ \-v value ] ]
+ 
+ \fBiscsiadm\fR \-k priority
+ 
+@@ -47,6 +47,12 @@ daemon (iscsid) be running.
+ This option is only valid for ping submode.
+ 
+ .TP
++\fB\-A\fR, \fB\-\-portal_type=\fI[ipv4|ipv6]\fR
++Specify the portal type for the new flash node entry to be created.
++.IP
++This option is only valid for flashnode submode of host mode and only with \fInew\fR operation.
++
++.TP
+ \fB\-b\fR, \fB\-\-packetsize=\fIpacketsize\fP
+ Specify the ping \fIpacketsize\fR.
+ 
+@@ -66,6 +72,14 @@ Currently iscsiadm support ping as submode for iface. For example,
+ 
+ iscsiadm -m iface -I ifacename -C ping -a ipaddr -b packetsize -c count -i interval
+ 
++For host, it supports chap , flashnode and stats as submodes. For example,
++
++iscsiadm -m host -H hostno -C chap -x chap_tbl_idx -o operation
++
++iscsiadm -m host -H hostno -C flashnode -x flashnode_idx -o operation
++
++iscsiadm -m host -H hostno -C stats
++
+ .TP
+ \fB\-d\fR, \fB\-\-debug=\fIdebug_level\fP
+ print debugging information. Valid values for debug_level are 0 to 8.
+@@ -170,8 +184,9 @@ for \fIiface\fR, all ifaces setup in /etc/iscsi/ifaces are displayed.
+ 
+ .TP
+ \fB\-n\fR, \fB\-\-name=\fIname\fR
+-Specify a field \fIname\fR in a record. For use with the \fIupdate\fR
+-operator.
++In node mode, specify a field \fIname\fR in a record. In flashnode submode of host mode, specify name of the flash node parameter.
++
++For use with the \fIupdate\fR operator.
+ .IP
+ 
+ .TP
+@@ -181,6 +196,8 @@ Specifies a database operator \fIop\fR. \fIop\fR must be one of
+ .IP
+ For iface mode, \fIapply\fR and \fIapplyall\fR  are also applicable.
+ .IP
++For flashnode submode of host mode, \fIlogin\fR and \fIlogout\fR are also applicable.
++.IP
+ This option is valid for all modes except fw. Delete should not be used on a running session. If it is iscsiadm will stop the session and then delete the
+ record.
+ .IP
+@@ -210,6 +227,12 @@ sid is passed in.
+ .IP
+ \fIapplyall\fR will cause the network settings to take effect on all the ifaces whose MAC address or host number matches that of the specific host.
+ 
++.IP
++\fIlogin\fR will log into the specified flash node entry.
++
++.IP
++\fIlogout\fR does the logout from the given flash node entry.
++
+ .TP
+ \fB\-p\fR, \fB\-\-portal=\fIip[:port]\fR
+ Use target portal with ip-address \fIip\fR and \fIport\fR. If port is not passed
+@@ -258,6 +281,7 @@ tuple passed in.
+ .TP
+ \fB\-s\fR, \fB\-\-stats\fR
+ Display session statistics.
++This option when used with host mode, displays host statistics.
+ 
+ .TP
+ \fB\-S\fR, \fB\-\-show\fR
+@@ -292,12 +316,18 @@ for session mode).
+ \fB\-v\fR, \fB\-\-value=\fIvalue\fR
+ Specify a \fIvalue\fR for use with the \fIupdate\fR operator.
+ .IP
+-This option is only valid for node mode.
++This option is only valid for node mode and flashnode submode of host mode.
+ 
+ .TP
+ \fB\-V\fR, \fB\-\-version\fR
+ display version and exit
+ 
++.TP
++\fB\-x\fR, \fB\-\-index=\fIindex\fR
++Specify the \fIindex\fR of the entity to operate on.
++.IP
++This option is only valid for chap and flashnode submodes of host mode.
++
+ .SH DISCOVERY TYPES
+ iSCSI defines 3 discovery types: SendTargets, SLP, and iSNS.
+ 
+diff --git a/etc/systemd/iscsid.service b/etc/systemd/iscsid.service
+new file mode 100644
+index 0000000..028e0b3
+--- /dev/null
++++ b/etc/systemd/iscsid.service
+@@ -0,0 +1,13 @@
++[Unit]
++Description=Open-iSCSI
++Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8)
++After=network.target NetworkManager-wait-online.service iscsiuio.service tgtd.service targetcli.service
++
++[Service]
++Type=forking
++PIDFile=/var/run/iscsid.pid
++ExecStart=/usr/sbin/iscsid
++ExecStop=/sbin/iscsiadm -k 0 2
++
++[Install]
++WantedBy=multi-user.target
+diff --git a/etc/systemd/iscsid.socket b/etc/systemd/iscsid.socket
+new file mode 100644
+index 0000000..832451d
+--- /dev/null
++++ b/etc/systemd/iscsid.socket
+@@ -0,0 +1,9 @@
++[Unit]
++Description=Open-iSCSI iscsid Socket
++Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8)
++
++[Socket]
++ListenStream=@ISCSIADM_ABSTRACT_NAMESPACE
++
++[Install]
++WantedBy=sockets.target
+diff --git a/include/fw_context.h b/include/fw_context.h
+index 1640859..6563d68 100644
+--- a/include/fw_context.h
++++ b/include/fw_context.h
+@@ -30,6 +30,9 @@
+ 
+ struct boot_context {
+ 	struct list_head list;
++	char boot_root[BOOT_NAME_MAXLEN];
++	char boot_nic[BOOT_NAME_MAXLEN];
++	char boot_target[BOOT_NAME_MAXLEN];
+ 
+ 	/* target settings */
+ 	int target_port;
+diff --git a/include/iscsi_err.h b/include/iscsi_err.h
+index aabea4e..125f443 100644
+--- a/include/iscsi_err.h
++++ b/include/iscsi_err.h
+@@ -62,6 +62,10 @@ enum {
+ 	ISCSI_ERR_OP_NOT_SUPP		= 27,
+ 	/* device or resource in use */
+ 	ISCSI_ERR_BUSY			= 28,
++	/* Operation failed, but retrying layer may succeed */
++	ISCSI_ERR_AGAIN			= 29,
++	/* unknown discovery type */
++	ISCSI_ERR_UNKNOWN_DISCOVERY_TYPE = 30,
+ 
+ 	/* Always last. Indicates end of error code space */
+ 	ISCSI_MAX_ERR_VAL,
+diff --git a/include/iscsi_if.h b/include/iscsi_if.h
+index dad9fd8..9d15811 100644
+--- a/include/iscsi_if.h
++++ b/include/iscsi_if.h
+@@ -68,8 +68,15 @@ enum iscsi_uevent_e {
+ 	ISCSI_UEVENT_PING		= UEVENT_BASE + 22,
+ 	ISCSI_UEVENT_GET_CHAP		= UEVENT_BASE + 23,
+ 	ISCSI_UEVENT_DELETE_CHAP	= UEVENT_BASE + 24,
+-
+-	ISCSI_UEVENT_MAX		= ISCSI_UEVENT_DELETE_CHAP,
++	ISCSI_UEVENT_SET_FLASHNODE_PARAMS	= UEVENT_BASE + 25,
++	ISCSI_UEVENT_NEW_FLASHNODE	= UEVENT_BASE + 26,
++	ISCSI_UEVENT_DEL_FLASHNODE	= UEVENT_BASE + 27,
++	ISCSI_UEVENT_LOGIN_FLASHNODE	= UEVENT_BASE + 28,
++	ISCSI_UEVENT_LOGOUT_FLASHNODE	= UEVENT_BASE + 29,
++	ISCSI_UEVENT_LOGOUT_FLASHNODE_SID	= UEVENT_BASE + 30,
++	ISCSI_UEVENT_SET_CHAP		= UEVENT_BASE + 31,
++	ISCSI_UEVENT_GET_HOST_STATS	= UEVENT_BASE + 32,
++	ISCSI_UEVENT_MAX		= ISCSI_UEVENT_GET_HOST_STATS,
+ 
+ 	/* up events */
+ 	ISCSI_KEVENT_RECV_PDU		= KEVENT_BASE + 1,
+@@ -219,6 +226,35 @@ struct iscsi_uevent {
+ 			uint32_t	host_no;
+ 			uint16_t	chap_tbl_idx;
+ 		} delete_chap;
++		struct msg_set_flashnode_param {
++			uint32_t	host_no;
++			uint32_t	flashnode_idx;
++			uint32_t	count;
++		} set_flashnode;
++		struct msg_new_flashnode {
++			uint32_t	host_no;
++			uint32_t	len;
++		} new_flashnode;
++		struct msg_del_flashnode {
++			uint32_t	host_no;
++			uint32_t	flashnode_idx;
++		} del_flashnode;
++		struct msg_login_flashnode {
++			uint32_t	host_no;
++			uint32_t	flashnode_idx;
++		} login_flashnode;
++		struct msg_logout_flashnode {
++			uint32_t	host_no;
++			uint32_t	flashnode_idx;
++		} logout_flashnode;
++		struct msg_logout_flashnode_sid {
++			uint32_t	host_no;
++			uint32_t	sid;
++		} logout_flashnode_sid;
++		struct msg_get_host_stats {
++			uint32_t	host_no;
++		} get_host_stats;
++
+ 	} u;
+ 	union {
+ 		/* messages k -> u */
+@@ -276,6 +312,9 @@ struct iscsi_uevent {
+ 						   with each ping request */
+ 			uint32_t	data_size;
+ 		} ping_comp;
++		struct msg_new_flashnode_ret {
++			uint32_t	flashnode_idx;
++		} new_flashnode_ret;
+ 	} r;
+ } __attribute__ ((aligned (sizeof(uint64_t))));
+ 
+@@ -283,8 +322,18 @@ enum iscsi_param_type {
+ 	ISCSI_PARAM,		/* iscsi_param (session, conn, target, LU) */
+ 	ISCSI_HOST_PARAM,	/* iscsi_host_param */
+ 	ISCSI_NET_PARAM,	/* iscsi_net_param */
++	ISCSI_FLASHNODE_PARAM,	/* iscsi_flashnode_param */
++	ISCSI_CHAP_PARAM,	/* iscsi_chap_param */
++	ISCSI_IFACE_PARAM,	/* iscsi_iface_param */
+ };
+ 
++/* structure for minimalist usecase */
++struct iscsi_param_info {
++	uint32_t len;		/* Actual length of the param value */
++	uint16_t param;		/* iscsi param */
++	uint8_t value[0];	/* length sized value follows */
++} __attribute__((__packed__));
++
+ struct iscsi_iface_param_info {
+ 	uint32_t iface_num;	/* iface number, 0 - n */
+ 	uint32_t len;		/* Actual length of the param */
+@@ -348,28 +397,106 @@ struct iscsi_path {
+ #define ISCSI_VLAN_DISABLE	0x01
+ #define ISCSI_VLAN_ENABLE	0x02
+ 
++/* iscsi generic enable/disabled setting for various features */
++#define ISCSI_NET_PARAM_DISABLE		0x01
++#define ISCSI_NET_PARAM_ENABLE		0x02
++
+ /* iSCSI network params */
+ enum iscsi_net_param {
+ 	ISCSI_NET_PARAM_IPV4_ADDR		= 1,
+-	ISCSI_NET_PARAM_IPV4_SUBNET		= 2,
+-	ISCSI_NET_PARAM_IPV4_GW			= 3,
+-	ISCSI_NET_PARAM_IPV4_BOOTPROTO		= 4,
+-	ISCSI_NET_PARAM_MAC			= 5,
+-	ISCSI_NET_PARAM_IPV6_LINKLOCAL		= 6,
+-	ISCSI_NET_PARAM_IPV6_ADDR		= 7,
+-	ISCSI_NET_PARAM_IPV6_ROUTER		= 8,
+-	ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG	= 9,
+-	ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG	= 10,
+-	ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG	= 11,
+-	ISCSI_NET_PARAM_IFACE_ENABLE		= 12,
+-	ISCSI_NET_PARAM_VLAN_ID			= 13,
+-	ISCSI_NET_PARAM_VLAN_PRIORITY		= 14,
+-	ISCSI_NET_PARAM_VLAN_ENABLED		= 15,
+-	ISCSI_NET_PARAM_VLAN_TAG		= 16,
+-	ISCSI_NET_PARAM_IFACE_TYPE		= 17,
+-	ISCSI_NET_PARAM_IFACE_NAME		= 18,
+-	ISCSI_NET_PARAM_MTU			= 19,
+-	ISCSI_NET_PARAM_PORT			= 20,
++	ISCSI_NET_PARAM_IPV4_SUBNET,
++	ISCSI_NET_PARAM_IPV4_GW,
++	ISCSI_NET_PARAM_IPV4_BOOTPROTO,
++	ISCSI_NET_PARAM_MAC,
++	ISCSI_NET_PARAM_IPV6_LINKLOCAL,
++	ISCSI_NET_PARAM_IPV6_ADDR,
++	ISCSI_NET_PARAM_IPV6_ROUTER,
++	ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG,
++	ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG,
++	ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG,
++	ISCSI_NET_PARAM_IFACE_ENABLE,
++	ISCSI_NET_PARAM_VLAN_ID,
++	ISCSI_NET_PARAM_VLAN_PRIORITY,
++	ISCSI_NET_PARAM_VLAN_ENABLED,
++	ISCSI_NET_PARAM_VLAN_TAG,
++	ISCSI_NET_PARAM_IFACE_TYPE,
++	ISCSI_NET_PARAM_IFACE_NAME,
++	ISCSI_NET_PARAM_MTU,
++	ISCSI_NET_PARAM_PORT,
++	ISCSI_NET_PARAM_IPADDR_STATE,
++	ISCSI_NET_PARAM_IPV6_LINKLOCAL_STATE,
++	ISCSI_NET_PARAM_IPV6_ROUTER_STATE,
++	ISCSI_NET_PARAM_DELAYED_ACK_EN,
++	ISCSI_NET_PARAM_TCP_NAGLE_DISABLE,
++	ISCSI_NET_PARAM_TCP_WSF_DISABLE,
++	ISCSI_NET_PARAM_TCP_WSF,
++	ISCSI_NET_PARAM_TCP_TIMER_SCALE,
++	ISCSI_NET_PARAM_TCP_TIMESTAMP_EN,
++	ISCSI_NET_PARAM_CACHE_ID,
++	ISCSI_NET_PARAM_IPV4_DHCP_DNS_ADDR_EN,
++	ISCSI_NET_PARAM_IPV4_DHCP_SLP_DA_EN,
++	ISCSI_NET_PARAM_IPV4_TOS_EN,
++	ISCSI_NET_PARAM_IPV4_TOS,
++	ISCSI_NET_PARAM_IPV4_GRAT_ARP_EN,
++	ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID_EN,
++	ISCSI_NET_PARAM_IPV4_DHCP_ALT_CLIENT_ID,
++	ISCSI_NET_PARAM_IPV4_DHCP_REQ_VENDOR_ID_EN,
++	ISCSI_NET_PARAM_IPV4_DHCP_USE_VENDOR_ID_EN,
++	ISCSI_NET_PARAM_IPV4_DHCP_VENDOR_ID,
++	ISCSI_NET_PARAM_IPV4_DHCP_LEARN_IQN_EN,
++	ISCSI_NET_PARAM_IPV4_FRAGMENT_DISABLE,
++	ISCSI_NET_PARAM_IPV4_IN_FORWARD_EN,
++	ISCSI_NET_PARAM_IPV4_TTL,
++	ISCSI_NET_PARAM_IPV6_GRAT_NEIGHBOR_ADV_EN,
++	ISCSI_NET_PARAM_IPV6_MLD_EN,
++	ISCSI_NET_PARAM_IPV6_FLOW_LABEL,
++	ISCSI_NET_PARAM_IPV6_TRAFFIC_CLASS,
++	ISCSI_NET_PARAM_IPV6_HOP_LIMIT,
++	ISCSI_NET_PARAM_IPV6_ND_REACHABLE_TMO,
++	ISCSI_NET_PARAM_IPV6_ND_REXMIT_TIME,
++	ISCSI_NET_PARAM_IPV6_ND_STALE_TMO,
++	ISCSI_NET_PARAM_IPV6_DUP_ADDR_DETECT_CNT,
++	ISCSI_NET_PARAM_IPV6_RTR_ADV_LINK_MTU,
++	ISCSI_NET_PARAM_REDIRECT_EN,
++};
++
++enum iscsi_ipaddress_state {
++	ISCSI_IPDDRESS_STATE_UNCONFIGURED,
++	ISCSI_IPDDRESS_STATE_ACQUIRING,
++	ISCSI_IPDDRESS_STATE_TENTATIVE,
++	ISCSI_IPDDRESS_STATE_VALID,
++	ISCSI_IPDDRESS_STATE_DISABLING,
++	ISCSI_IPDDRESS_STATE_INVALID,
++	ISCSI_IPDDRESS_STATE_DEPRECATED,
++};
++
++enum iscsi_router_state {
++	ISCSI_ROUTER_STATE_UNKNOWN,
++	ISCSI_ROUTER_STATE_ADVERTISED,
++	ISCSI_ROUTER_STATE_MANUAL,
++	ISCSI_ROUTER_STATE_STALE,
++};
++
++/* iSCSI specific settings params for iface */
++enum iscsi_iface_param {
++	ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO,
++	ISCSI_IFACE_PARAM_HDRDGST_EN,
++	ISCSI_IFACE_PARAM_DATADGST_EN,
++	ISCSI_IFACE_PARAM_IMM_DATA_EN,
++	ISCSI_IFACE_PARAM_INITIAL_R2T_EN,
++	ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN,
++	ISCSI_IFACE_PARAM_PDU_INORDER_EN,
++	ISCSI_IFACE_PARAM_ERL,
++	ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH,
++	ISCSI_IFACE_PARAM_FIRST_BURST,
++	ISCSI_IFACE_PARAM_MAX_R2T,
++	ISCSI_IFACE_PARAM_MAX_BURST,
++	ISCSI_IFACE_PARAM_CHAP_AUTH_EN,
++	ISCSI_IFACE_PARAM_BIDI_CHAP_EN,
++	ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL,
++	ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN,
++	ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN,
++	ISCSI_IFACE_PARAM_INITIATOR_NAME,
+ };
+ 
+ enum iscsi_conn_state {
+@@ -460,61 +587,157 @@ enum iscsi_param {
+ 
+ 	ISCSI_PARAM_TGT_RESET_TMO,
+ 	ISCSI_PARAM_TARGET_ALIAS,
++
++	ISCSI_PARAM_CHAP_IN_IDX,
++	ISCSI_PARAM_CHAP_OUT_IDX,
++
++	ISCSI_PARAM_BOOT_ROOT,
++	ISCSI_PARAM_BOOT_NIC,
++	ISCSI_PARAM_BOOT_TARGET,
++
++	ISCSI_PARAM_AUTO_SND_TGT_DISABLE,
++	ISCSI_PARAM_DISCOVERY_SESS,
++	ISCSI_PARAM_PORTAL_TYPE,
++	ISCSI_PARAM_CHAP_AUTH_EN,
++	ISCSI_PARAM_DISCOVERY_LOGOUT_EN,
++	ISCSI_PARAM_BIDI_CHAP_EN,
++	ISCSI_PARAM_DISCOVERY_AUTH_OPTIONAL,
++
++	ISCSI_PARAM_DEF_TIME2WAIT,
++	ISCSI_PARAM_DEF_TIME2RETAIN,
++	ISCSI_PARAM_MAX_SEGMENT_SIZE,
++	ISCSI_PARAM_STATSN,
++	ISCSI_PARAM_KEEPALIVE_TMO,
++	ISCSI_PARAM_LOCAL_PORT,
++	ISCSI_PARAM_TSID,
++	ISCSI_PARAM_DEF_TASKMGMT_TMO,
++
++	ISCSI_PARAM_TCP_TIMESTAMP_STAT,
++	ISCSI_PARAM_TCP_WSF_DISABLE,
++	ISCSI_PARAM_TCP_NAGLE_DISABLE,
++	ISCSI_PARAM_TCP_TIMER_SCALE,
++	ISCSI_PARAM_TCP_TIMESTAMP_EN,
++	ISCSI_PARAM_TCP_XMIT_WSF,
++	ISCSI_PARAM_TCP_RECV_WSF,
++	ISCSI_PARAM_IP_FRAGMENT_DISABLE,
++	ISCSI_PARAM_IPV4_TOS,
++	ISCSI_PARAM_IPV6_TC,
++	ISCSI_PARAM_IPV6_FLOW_LABEL,
++	ISCSI_PARAM_IS_FW_ASSIGNED_IPV6,
++
++	ISCSI_PARAM_DISCOVERY_PARENT_IDX,
++	ISCSI_PARAM_DISCOVERY_PARENT_TYPE,
+ 	/* must always be last */
+ 	ISCSI_PARAM_MAX,
+ };
+ 
+-#define ISCSI_MAX_RECV_DLENGTH		(1ULL << ISCSI_PARAM_MAX_RECV_DLENGTH)
+-#define ISCSI_MAX_XMIT_DLENGTH		(1ULL << ISCSI_PARAM_MAX_XMIT_DLENGTH)
+-#define ISCSI_HDRDGST_EN		(1ULL << ISCSI_PARAM_HDRDGST_EN)
+-#define ISCSI_DATADGST_EN		(1ULL << ISCSI_PARAM_DATADGST_EN)
+-#define ISCSI_INITIAL_R2T_EN		(1ULL << ISCSI_PARAM_INITIAL_R2T_EN)
+-#define ISCSI_MAX_R2T			(1ULL << ISCSI_PARAM_MAX_R2T)
+-#define ISCSI_IMM_DATA_EN		(1ULL << ISCSI_PARAM_IMM_DATA_EN)
+-#define ISCSI_FIRST_BURST		(1ULL << ISCSI_PARAM_FIRST_BURST)
+-#define ISCSI_MAX_BURST			(1ULL << ISCSI_PARAM_MAX_BURST)
+-#define ISCSI_PDU_INORDER_EN		(1ULL << ISCSI_PARAM_PDU_INORDER_EN)
+-#define ISCSI_DATASEQ_INORDER_EN	(1ULL << ISCSI_PARAM_DATASEQ_INORDER_EN)
+-#define ISCSI_ERL			(1ULL << ISCSI_PARAM_ERL)
+-#define ISCSI_IFMARKER_EN		(1ULL << ISCSI_PARAM_IFMARKER_EN)
+-#define ISCSI_OFMARKER_EN		(1ULL << ISCSI_PARAM_OFMARKER_EN)
+-#define ISCSI_EXP_STATSN		(1ULL << ISCSI_PARAM_EXP_STATSN)
+-#define ISCSI_TARGET_NAME		(1ULL << ISCSI_PARAM_TARGET_NAME)
+-#define ISCSI_TPGT			(1ULL << ISCSI_PARAM_TPGT)
+-#define ISCSI_PERSISTENT_ADDRESS	(1ULL << ISCSI_PARAM_PERSISTENT_ADDRESS)
+-#define ISCSI_PERSISTENT_PORT		(1ULL << ISCSI_PARAM_PERSISTENT_PORT)
+-#define ISCSI_SESS_RECOVERY_TMO		(1ULL << ISCSI_PARAM_SESS_RECOVERY_TMO)
+-#define ISCSI_CONN_PORT			(1ULL << ISCSI_PARAM_CONN_PORT)
+-#define ISCSI_CONN_ADDRESS		(1ULL << ISCSI_PARAM_CONN_ADDRESS)
+-#define ISCSI_USERNAME			(1ULL << ISCSI_PARAM_USERNAME)
+-#define ISCSI_USERNAME_IN		(1ULL << ISCSI_PARAM_USERNAME_IN)
+-#define ISCSI_PASSWORD			(1ULL << ISCSI_PARAM_PASSWORD)
+-#define ISCSI_PASSWORD_IN		(1ULL << ISCSI_PARAM_PASSWORD_IN)
+-#define ISCSI_FAST_ABORT		(1ULL << ISCSI_PARAM_FAST_ABORT)
+-#define ISCSI_ABORT_TMO			(1ULL << ISCSI_PARAM_ABORT_TMO)
+-#define ISCSI_LU_RESET_TMO		(1ULL << ISCSI_PARAM_LU_RESET_TMO)
+-#define ISCSI_HOST_RESET_TMO		(1ULL << ISCSI_PARAM_HOST_RESET_TMO)
+-#define ISCSI_PING_TMO			(1ULL << ISCSI_PARAM_PING_TMO)
+-#define ISCSI_RECV_TMO			(1ULL << ISCSI_PARAM_RECV_TMO)
+-#define ISCSI_IFACE_NAME		(1ULL << ISCSI_PARAM_IFACE_NAME)
+-#define ISCSI_ISID			(1ULL << ISCSI_PARAM_ISID)
+-#define ISCSI_INITIATOR_NAME		(1ULL << ISCSI_PARAM_INITIATOR_NAME)
+-#define ISCSI_TGT_RESET_TMO		(1ULL << ISCSI_PARAM_TGT_RESET_TMO)
+-#define ISCSI_TARGET_ALIAS		(1ULL << ISCSI_PARAM_TARGET_ALIAS)
+-
+ /* iSCSI HBA params */
+ enum iscsi_host_param {
+ 	ISCSI_HOST_PARAM_HWADDRESS,
+ 	ISCSI_HOST_PARAM_INITIATOR_NAME,
+ 	ISCSI_HOST_PARAM_NETDEV_NAME,
+ 	ISCSI_HOST_PARAM_IPADDRESS,
++	ISCSI_HOST_PARAM_PORT_STATE,
++	ISCSI_HOST_PARAM_PORT_SPEED,
+ 	ISCSI_HOST_PARAM_MAX,
+ };
+ 
+-#define ISCSI_HOST_HWADDRESS		(1ULL << ISCSI_HOST_PARAM_HWADDRESS)
+-#define ISCSI_HOST_INITIATOR_NAME	(1ULL << ISCSI_HOST_PARAM_INITIATOR_NAME)
+-#define ISCSI_HOST_NETDEV_NAME		(1ULL << ISCSI_HOST_PARAM_NETDEV_NAME)
+-#define ISCSI_HOST_IPADDRESS		(1ULL << ISCSI_HOST_PARAM_IPADDRESS)
++/* portal type */
++#define PORTAL_TYPE_IPV4	"ipv4"
++#define PORTAL_TYPE_IPV6	"ipv6"
++
++/* iSCSI Flash Target params */
++enum iscsi_flashnode_param {
++	ISCSI_FLASHNODE_IS_FW_ASSIGNED_IPV6,
++	ISCSI_FLASHNODE_PORTAL_TYPE,
++	ISCSI_FLASHNODE_AUTO_SND_TGT_DISABLE,
++	ISCSI_FLASHNODE_DISCOVERY_SESS,
++	ISCSI_FLASHNODE_ENTRY_EN,
++	ISCSI_FLASHNODE_HDR_DGST_EN,
++	ISCSI_FLASHNODE_DATA_DGST_EN,
++	ISCSI_FLASHNODE_IMM_DATA_EN,
++	ISCSI_FLASHNODE_INITIAL_R2T_EN,
++	ISCSI_FLASHNODE_DATASEQ_INORDER,
++	ISCSI_FLASHNODE_PDU_INORDER,
++	ISCSI_FLASHNODE_CHAP_AUTH_EN,
++	ISCSI_FLASHNODE_SNACK_REQ_EN,
++	ISCSI_FLASHNODE_DISCOVERY_LOGOUT_EN,
++	ISCSI_FLASHNODE_BIDI_CHAP_EN,
++	/* make authentication for discovery sessions optional */
++	ISCSI_FLASHNODE_DISCOVERY_AUTH_OPTIONAL,
++	ISCSI_FLASHNODE_ERL,
++	ISCSI_FLASHNODE_TCP_TIMESTAMP_STAT,
++	ISCSI_FLASHNODE_TCP_NAGLE_DISABLE,
++	ISCSI_FLASHNODE_TCP_WSF_DISABLE,
++	ISCSI_FLASHNODE_TCP_TIMER_SCALE,
++	ISCSI_FLASHNODE_TCP_TIMESTAMP_EN,
++	ISCSI_FLASHNODE_IP_FRAG_DISABLE,
++	ISCSI_FLASHNODE_MAX_RECV_DLENGTH,
++	ISCSI_FLASHNODE_MAX_XMIT_DLENGTH,
++	ISCSI_FLASHNODE_FIRST_BURST,
++	ISCSI_FLASHNODE_DEF_TIME2WAIT,
++	ISCSI_FLASHNODE_DEF_TIME2RETAIN,
++	ISCSI_FLASHNODE_MAX_R2T,
++	ISCSI_FLASHNODE_KEEPALIVE_TMO,
++	ISCSI_FLASHNODE_ISID,
++	ISCSI_FLASHNODE_TSID,
++	ISCSI_FLASHNODE_PORT,
++	ISCSI_FLASHNODE_MAX_BURST,
++	ISCSI_FLASHNODE_DEF_TASKMGMT_TMO,
++	ISCSI_FLASHNODE_IPADDR,
++	ISCSI_FLASHNODE_ALIAS,
++	ISCSI_FLASHNODE_REDIRECT_IPADDR,
++	ISCSI_FLASHNODE_MAX_SEGMENT_SIZE,
++	ISCSI_FLASHNODE_LOCAL_PORT,
++	ISCSI_FLASHNODE_IPV4_TOS,
++	ISCSI_FLASHNODE_IPV6_TC,
++	ISCSI_FLASHNODE_IPV6_FLOW_LABEL,
++	ISCSI_FLASHNODE_NAME,
++	ISCSI_FLASHNODE_TPGT,
++	ISCSI_FLASHNODE_LINK_LOCAL_IPV6,
++	ISCSI_FLASHNODE_DISCOVERY_PARENT_IDX,
++	ISCSI_FLASHNODE_DISCOVERY_PARENT_TYPE,
++	ISCSI_FLASHNODE_TCP_XMIT_WSF,
++	ISCSI_FLASHNODE_TCP_RECV_WSF,
++	ISCSI_FLASHNODE_CHAP_IN_IDX,
++	ISCSI_FLASHNODE_CHAP_OUT_IDX,
++	ISCSI_FLASHNODE_USERNAME,
++	ISCSI_FLASHNODE_USERNAME_IN,
++	ISCSI_FLASHNODE_PASSWORD,
++	ISCSI_FLASHNODE_PASSWORD_IN,
++	ISCSI_FLASHNODE_STATSN,
++	ISCSI_FLASHNODE_EXP_STATSN,
++	ISCSI_FLASHNODE_IS_BOOT_TGT,
++
++	ISCSI_FLASHNODE_MAX,
++};
++
++struct iscsi_flashnode_param_info {
++	uint32_t len;		/* Actual length of the param */
++	uint16_t param;		/* iscsi param value */
++	uint8_t value[0];	/* length sized value follows */
++} __attribute__((__packed__));
++
++enum iscsi_discovery_parent_type {
++	ISCSI_DISC_PARENT_UNKNOWN	= 0x1,
++	ISCSI_DISC_PARENT_SENDTGT	= 0x2,
++	ISCSI_DISC_PARENT_ISNS		= 0x3,
++};
++
++/* iSCSI port Speed */
++enum iscsi_port_speed {
++	ISCSI_PORT_SPEED_UNKNOWN	= 0x1,
++	ISCSI_PORT_SPEED_10MBPS		= 0x2,
++	ISCSI_PORT_SPEED_100MBPS	= 0x4,
++	ISCSI_PORT_SPEED_1GBPS		= 0x8,
++	ISCSI_PORT_SPEED_10GBPS		= 0x10,
++};
++
++/* iSCSI port state */
++enum iscsi_port_state {
++	ISCSI_PORT_STATE_DOWN		= 0x1,
++	ISCSI_PORT_STATE_UP		= 0x2,
++};
+ 
+ /* iSCSI PING status/error code */
+ enum iscsi_ping_status_code {
+@@ -551,7 +774,7 @@ enum iscsi_ping_status_code {
+ #define CAP_DIGEST_OFFLOAD	0x1000	/* offload hdr and data digests */
+ #define CAP_PADDING_OFFLOAD	0x2000	/* offload padding insertion, removal,
+ 					 and verification */
+-#define CAP_LOGIN_OFFLOAD	0x4000  /* offload normal session login */
++#define CAP_LOGIN_OFFLOAD	0x4000  /* offload session login */
+ 
+ /*
+  * These flags describes reason of stop_conn() call
+@@ -617,9 +840,16 @@ enum chap_type_e {
+ 	CHAP_TYPE_IN,
+ };
+ 
++enum iscsi_chap_param {
++	ISCSI_CHAP_PARAM_INDEX,
++	ISCSI_CHAP_PARAM_CHAP_TYPE,
++	ISCSI_CHAP_PARAM_USERNAME,
++	ISCSI_CHAP_PARAM_PASSWORD,
++	ISCSI_CHAP_PARAM_PASSWORD_LEN
++};
++
+ #define ISCSI_CHAP_AUTH_NAME_MAX_LEN	256
+ #define ISCSI_CHAP_AUTH_SECRET_MAX_LEN	256
+-
+ struct iscsi_chap_rec {
+ 	uint16_t chap_tbl_idx;
+ 	enum chap_type_e chap_type;
+@@ -628,4 +858,112 @@ struct iscsi_chap_rec {
+ 	uint8_t password_length;
+ };
+ 
++#define ISCSI_HOST_STATS_CUSTOM_MAX		32
++#define ISCSI_HOST_STATS_CUSTOM_DESC_MAX	64
++struct iscsi_host_stats_custom {
++	char desc[ISCSI_HOST_STATS_CUSTOM_DESC_MAX];
++	uint64_t value;
++};
++
++/* struct iscsi_offload_host_stats: Host statistics,
++ * Include statistics for MAC, IP, TCP & iSCSI.
++ */
++struct iscsi_offload_host_stats {
++	/* MAC */
++	uint64_t mactx_frames;
++	uint64_t mactx_bytes;
++	uint64_t mactx_multicast_frames;
++	uint64_t mactx_broadcast_frames;
++	uint64_t mactx_pause_frames;
++	uint64_t mactx_control_frames;
++	uint64_t mactx_deferral;
++	uint64_t mactx_excess_deferral;
++	uint64_t mactx_late_collision;
++	uint64_t mactx_abort;
++	uint64_t mactx_single_collision;
++	uint64_t mactx_multiple_collision;
++	uint64_t mactx_collision;
++	uint64_t mactx_frames_dropped;
++	uint64_t mactx_jumbo_frames;
++	uint64_t macrx_frames;
++	uint64_t macrx_bytes;
++	uint64_t macrx_unknown_control_frames;
++	uint64_t macrx_pause_frames;
++	uint64_t macrx_control_frames;
++	uint64_t macrx_dribble;
++	uint64_t macrx_frame_length_error;
++	uint64_t macrx_jabber;
++	uint64_t macrx_carrier_sense_error;
++	uint64_t macrx_frame_discarded;
++	uint64_t macrx_frames_dropped;
++	uint64_t mac_crc_error;
++	uint64_t mac_encoding_error;
++	uint64_t macrx_length_error_large;
++	uint64_t macrx_length_error_small;
++	uint64_t macrx_multicast_frames;
++	uint64_t macrx_broadcast_frames;
++	/* IP */
++	uint64_t iptx_packets;
++	uint64_t iptx_bytes;
++	uint64_t iptx_fragments;
++	uint64_t iprx_packets;
++	uint64_t iprx_bytes;
++	uint64_t iprx_fragments;
++	uint64_t ip_datagram_reassembly;
++	uint64_t ip_invalid_address_error;
++	uint64_t ip_error_packets;
++	uint64_t ip_fragrx_overlap;
++	uint64_t ip_fragrx_outoforder;
++	uint64_t ip_datagram_reassembly_timeout;
++	uint64_t ipv6tx_packets;
++	uint64_t ipv6tx_bytes;
++	uint64_t ipv6tx_fragments;
++	uint64_t ipv6rx_packets;
++	uint64_t ipv6rx_bytes;
++	uint64_t ipv6rx_fragments;
++	uint64_t ipv6_datagram_reassembly;
++	uint64_t ipv6_invalid_address_error;
++	uint64_t ipv6_error_packets;
++	uint64_t ipv6_fragrx_overlap;
++	uint64_t ipv6_fragrx_outoforder;
++	uint64_t ipv6_datagram_reassembly_timeout;
++	/* TCP */
++	uint64_t tcptx_segments;
++	uint64_t tcptx_bytes;
++	uint64_t tcprx_segments;
++	uint64_t tcprx_byte;
++	uint64_t tcp_duplicate_ack_retx;
++	uint64_t tcp_retx_timer_expired;
++	uint64_t tcprx_duplicate_ack;
++	uint64_t tcprx_pure_ackr;
++	uint64_t tcptx_delayed_ack;
++	uint64_t tcptx_pure_ack;
++	uint64_t tcprx_segment_error;
++	uint64_t tcprx_segment_outoforder;
++	uint64_t tcprx_window_probe;
++	uint64_t tcprx_window_update;
++	uint64_t tcptx_window_probe_persist;
++	/* ECC */
++	uint64_t ecc_error_correction;
++	/* iSCSI */
++	uint64_t iscsi_pdu_tx;
++	uint64_t iscsi_data_bytes_tx;
++	uint64_t iscsi_pdu_rx;
++	uint64_t iscsi_data_bytes_rx;
++	uint64_t iscsi_io_completed;
++	uint64_t iscsi_unexpected_io_rx;
++	uint64_t iscsi_format_error;
++	uint64_t iscsi_hdr_digest_error;
++	uint64_t iscsi_data_digest_error;
++	uint64_t iscsi_sequence_error;
++	/*
++	 * iSCSI Custom Host Statistics support, i.e. Transport could
++	 * extend existing host statistics with its own specific statistics
++	 * up to ISCSI_HOST_STATS_CUSTOM_MAX
++	 */
++	uint32_t custom_length;
++	struct iscsi_host_stats_custom custom[0]
++		 __attribute__ ((aligned (sizeof(uint64_t))));
++};
++
+ #endif
+diff --git a/include/iscsi_proto.h b/include/iscsi_proto.h
+index 1c69feb..56f757b 100644
+--- a/include/iscsi_proto.h
++++ b/include/iscsi_proto.h
+@@ -619,6 +619,7 @@ struct iscsi_reject {
+ #define KEY_MAXLEN		64
+ #define VALUE_MAXLEN		255
+ #define TARGET_NAME_MAXLEN	VALUE_MAXLEN
++#define BOOT_NAME_MAXLEN	256
+ 
+ #define ISCSI_DEF_MAX_RECV_SEG_LEN		8192
+ #define ISCSI_MIN_MAX_RECV_SEG_LEN		512
+diff --git a/iscsiuio/.gitignore b/iscsiuio/.gitignore
+new file mode 100644
+index 0000000..a27452a
+--- /dev/null
++++ b/iscsiuio/.gitignore
+@@ -0,0 +1,25 @@
++# Autogenerated files
++stamp-h1
++Makefile.in
++Makefile
++configure
++config.h.in
++config.h
++config.guess
++config.log
++config.status
++config.sub
++COPYING
++
++.deps
++autom4te.cache
++
++# autotools
++aclocal.m4
++compile
++depcomp
++install-sh
++libtool
++ltmain.sh
++missing
++
+diff --git a/iscsiuio/AUTHORS b/iscsiuio/AUTHORS
+new file mode 100644
+index 0000000..e69de29
+diff --git a/iscsiuio/ChangeLog b/iscsiuio/ChangeLog
+new file mode 100644
+index 0000000..a91b4d5
+--- /dev/null
++++ b/iscsiuio/ChangeLog
+@@ -0,0 +1,7 @@
++Version 0.4.1 (July 20, 2009)
++  * Fix from Mike Christie to determine page size from getpagesize()
++    rather then the constant PAGE_SIZE.  PAGE_SIZE is not defined om
++    ia64 and ppc.
++  * Update documentation to indicate IPv6 is not supported
++  * Fix code to catch the message from the CNIC that the network
++    interface is going down.
+diff --git a/iscsiuio/INSTALL b/iscsiuio/INSTALL
+new file mode 100644
+index 0000000..c9fd2c0
+--- /dev/null
++++ b/iscsiuio/INSTALL
+@@ -0,0 +1,290 @@
++Installation Instructions
++*************************
++
++Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
++2006, 2007, 2008 Free Software Foundation, Inc.
++
++   This file is free documentation; the Free Software Foundation gives
++unlimited permission to copy, distribute and modify it.
++
++Basic Installation
++==================
++
++   Briefly, the shell commands `./configure; make; make install' should
++configure, build, and install this package.  The following
++more-detailed instructions are generic; see the `README' file for
++instructions specific to this package.
++
++   The `configure' shell script attempts to guess correct values for
++various system-dependent variables used during compilation.  It uses
++those values to create a `Makefile' in each directory of the package.
++It may also create one or more `.h' files containing system-dependent
++definitions.  Finally, it creates a shell script `config.status' that
++you can run in the future to recreate the current configuration, and a
++file `config.log' containing compiler output (useful mainly for
++debugging `configure').
++
++   It can also use an optional file (typically called `config.cache'
++and enabled with `--cache-file=config.cache' or simply `-C') that saves
++the results of its tests to speed up reconfiguring.  Caching is
++disabled by default to prevent problems with accidental use of stale
++cache files.
++
++   If you need to do unusual things to compile the package, please try
++to figure out how `configure' could check whether to do them, and mail
++diffs or instructions to the address given in the `README' so they can
++be considered for the next release.  If you are using the cache, and at
++some point `config.cache' contains results you don't want to keep, you
++may remove or edit it.
++
++   The file `configure.ac' (or `configure.in') is used to create
++`configure' by a program called `autoconf'.  You need `configure.ac' if
++you want to change it or regenerate `configure' using a newer version
++of `autoconf'.
++
++The simplest way to compile this package is:
++
++  1. `cd' to the directory containing the package's source code and type
++     `./configure' to configure the package for your system.
++
++     Running `configure' might take a while.  While running, it prints
++     some messages telling which features it is checking for.
++
++  2. Type `make' to compile the package.
++
++  3. Optionally, type `make check' to run any self-tests that come with
++     the package.
++
++  4. Type `make install' to install the programs and any data files and
++     documentation.
++
++  5. You can remove the program binaries and object files from the
++     source code directory by typing `make clean'.  To also remove the
++     files that `configure' created (so you can compile the package for
++     a different kind of computer), type `make distclean'.  There is
++     also a `make maintainer-clean' target, but that is intended mainly
++     for the package's developers.  If you use it, you may have to get
++     all sorts of other programs in order to regenerate files that came
++     with the distribution.
++
++  6. Often, you can also type `make uninstall' to remove the installed
++     files again.
++
++Compilers and Options
++=====================
++
++   Some systems require unusual options for compilation or linking that
++the `configure' script does not know about.  Run `./configure --help'
++for details on some of the pertinent environment variables.
++
++   You can give `configure' initial values for configuration parameters
++by setting variables in the command line or in the environment.  Here
++is an example:
++
++     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
++
++   *Note Defining Variables::, for more details.
++
++Compiling For Multiple Architectures
++====================================
++
++   You can compile the package for more than one kind of computer at the
++same time, by placing the object files for each architecture in their
++own directory.  To do this, you can use GNU `make'.  `cd' to the
++directory where you want the object files and executables to go and run
++the `configure' script.  `configure' automatically checks for the
++source code in the directory that `configure' is in and in `..'.
++
++   With a non-GNU `make', it is safer to compile the package for one
++architecture at a time in the source code directory.  After you have
++installed the package for one architecture, use `make distclean' before
++reconfiguring for another architecture.
++
++   On MacOS X 10.5 and later systems, you can create libraries and
++executables that work on multiple system types--known as "fat" or
++"universal" binaries--by specifying multiple `-arch' options to the
++compiler but only a single `-arch' option to the preprocessor.  Like
++this:
++
++     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
++                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
++                 CPP="gcc -E" CXXCPP="g++ -E"
++
++   This is not guaranteed to produce working output in all cases, you
++may have to build one architecture at a time and combine the results
++using the `lipo' tool if you have problems.
++
++Installation Names
++==================
++
++   By default, `make install' installs the package's commands under
++`/usr/local/bin', include files under `/usr/local/include', etc.  You
++can specify an installation prefix other than `/usr/local' by giving
++`configure' the option `--prefix=PREFIX'.
++
++   You can specify separate installation prefixes for
++architecture-specific files and architecture-independent files.  If you
++pass the option `--exec-prefix=PREFIX' to `configure', the package uses
++PREFIX as the prefix for installing programs and libraries.
++Documentation and other data files still use the regular prefix.
++
++   In addition, if you use an unusual directory layout you can give
++options like `--bindir=DIR' to specify different values for particular
++kinds of files.  Run `configure --help' for a list of the directories
++you can set and what kinds of files go in them.
++
++   If the package supports it, you can cause programs to be installed
++with an extra prefix or suffix on their names by giving `configure' the
++option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
++
++Optional Features
++=================
++
++   Some packages pay attention to `--enable-FEATURE' options to
++`configure', where FEATURE indicates an optional part of the package.
++They may also pay attention to `--with-PACKAGE' options, where PACKAGE
++is something like `gnu-as' or `x' (for the X Window System).  The
++`README' should mention any `--enable-' and `--with-' options that the
++package recognizes.
++
++   For packages that use the X Window System, `configure' can usually
++find the X include and library files automatically, but if it doesn't,
++you can use the `configure' options `--x-includes=DIR' and
++`--x-libraries=DIR' to specify their locations.
++
++Particular systems
++==================
++
++   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
++CC is not installed, it is recommended to use the following options in
++order to use an ANSI C compiler:
++
++     ./configure CC="cc -Ae"
++
++and if that doesn't work, install pre-built binaries of GCC for HP-UX.
++
++   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
++parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
++a workaround.  If GNU CC is not installed, it is therefore recommended
++to try
++
++     ./configure CC="cc"
++
++and if that doesn't work, try
++
++     ./configure CC="cc -nodtk"
++
++Specifying the System Type
++==========================
++
++   There may be some features `configure' cannot figure out
++automatically, but needs to determine by the type of machine the package
++will run on.  Usually, assuming the package is built to be run on the
++_same_ architectures, `configure' can figure that out, but if it prints
++a message saying it cannot guess the machine type, give it the
++`--build=TYPE' option.  TYPE can either be a short name for the system
++type, such as `sun4', or a canonical name which has the form:
++
++     CPU-COMPANY-SYSTEM
++
++where SYSTEM can have one of these forms:
++
++     OS KERNEL-OS
++
++   See the file `config.sub' for the possible values of each field.  If
++`config.sub' isn't included in this package, then this package doesn't
++need to know the machine type.
++
++   If you are _building_ compiler tools for cross-compiling, you should
++use the option `--target=TYPE' to select the type of system they will
++produce code for.
++
++   If you want to _use_ a cross compiler, that generates code for a
++platform different from the build platform, you should specify the
++"host" platform (i.e., that on which the generated programs will
++eventually be run) with `--host=TYPE'.
++
++Sharing Defaults
++================
++
++   If you want to set default values for `configure' scripts to share,
++you can create a site shell script called `config.site' that gives
++default values for variables like `CC', `cache_file', and `prefix'.
++`configure' looks for `PREFIX/share/config.site' if it exists, then
++`PREFIX/etc/config.site' if it exists.  Or, you can set the
++`CONFIG_SITE' environment variable to the location of the site script.
++A warning: not all `configure' scripts look for a site script.
++
++Defining Variables
++==================
++
++   Variables not defined in a site shell script can be set in the
++environment passed to `configure'.  However, some packages may run
++configure again during the build, and the customized values of these
++variables may be lost.  In order to avoid this problem, you should set
++them in the `configure' command line, using `VAR=value'.  For example:
++
++     ./configure CC=/usr/local2/bin/gcc
++
++causes the specified `gcc' to be used as the C compiler (unless it is
++overridden in the site shell script).
++
++Unfortunately, this technique does not work for `CONFIG_SHELL' due to
++an Autoconf bug.  Until the bug is fixed you can use this workaround:
++
++     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
++
++`configure' Invocation
++======================
++
++   `configure' recognizes the following options to control how it
++operates.
++
++`--help'
++`-h'
++     Print a summary of all of the options to `configure', and exit.
++
++`--help=short'
++`--help=recursive'
++     Print a summary of the options unique to this package's
++     `configure', and exit.  The `short' variant lists options used
++     only in the top level, while the `recursive' variant lists options
++     also present in any nested packages.
++
++`--version'
++`-V'
++     Print the version of Autoconf used to generate the `configure'
++     script, and exit.
++
++`--cache-file=FILE'
++     Enable the cache: use and save the results of the tests in FILE,
++     traditionally `config.cache'.  FILE defaults to `/dev/null' to
++     disable caching.
++
++`--config-cache'
++`-C'
++     Alias for `--cache-file=config.cache'.
++
++`--quiet'
++`--silent'
++`-q'
++     Do not print messages saying which checks are being made.  To
++     suppress all normal output, redirect it to `/dev/null' (any error
++     messages will still be shown).
++
++`--srcdir=DIR'
++     Look for the package's source code in directory DIR.  Usually
++     `configure' can determine that directory automatically.
++
++`--prefix=DIR'
++     Use DIR as the installation prefix.  *Note Installation Names::
++     for more details, including other options available for fine-tuning
++     the installation locations.
++
++`--no-create'
++`-n'
++     Run the configure checks, but stop before creating any output
++     files.
++
++`configure' also accepts some other, not widely useful, options.  Run
++`configure --help' for more details.
+diff --git a/iscsiuio/Makefile.am b/iscsiuio/Makefile.am
+new file mode 100644
+index 0000000..28dd776
+--- /dev/null
++++ b/iscsiuio/Makefile.am
+@@ -0,0 +1,25 @@
++SUBDIRS= src
++
++EXTRA_DIST = build_date
++
++build_date:
++	echo 'char *build_date = "'`date`'";' > build_date.c
++	echo 'char *build_date;'> build_date.h
++
++manprefix = /usr/share
++mandir = ${manprefix}/man
++logdir = /etc/logrotate.d
++
++install-am: all-am
++	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install-man install-log install-brcm
++
++install-man:
++	cat docs/iscsiuio.8 | GZIP=$(GZIP_ENV) gzip -c > iscsiuio.8.gz
++	$(INSTALL_PROGRAM) iscsiuio.8.gz $(mandir)/man8
++
++install-log:
++	$(INSTALL_PROGRAM) iscsiuiolog $(logdir)
++
++install-brcm:
++	-rm -f $(sbindir)/brcm_iscsiuio
++	-ln -s $(sbindir)/iscsiuio $(sbindir)/brcm_iscsiuio
+diff --git a/iscsiuio/NEWS b/iscsiuio/NEWS
+new file mode 100644
+index 0000000..e69de29
+diff --git a/iscsiuio/README b/iscsiuio/README
+new file mode 100644
+index 0000000..a283116
+--- /dev/null
++++ b/iscsiuio/README
+@@ -0,0 +1,224 @@
++Iscsiuio Userspace Tool
++Version 0.7.8.2
++Dec 10, 2013
++------------------------------------------------------
++
++This tool is to be used in conjunction with the Broadcom NetXtreme II Linux
++driver (Kernel module name: 'bnx2' and 'bnx2x'), Broadcom CNIC driver,
++and the Broadcom iSCSI driver (Kernel module name: 'bnx2i').
++This user space tool is used in conjunction with the following
++Broadcom Network Controllers:
++  bnx2:  BCM5706, BCM5708, BCM5709 devices
++  bnx2x: BCM57710, BCM57711, BCM57711E, BCM57712, BCM57712E,
++         BCM57800, BCM57810, BCM57840 devices
++
++This utility will provide the ARP and DHCP functionality for the iSCSI offload.
++The communication to the driver is done via Userspace I/O (Kernel module name
++'uio').
++
++There is one component to this application:
++
++1.  'iscsiuio' - This is the daemon which aids in creating iSCSI offloaded
++                      connections.
++
++Dependencies:
++=======================================
++
++Linux Kernel Dependencies:
++1.  Broadcom CNIC driver (cnic)
++1.  Broadcom iSCSI offload driver (bnx2i)
++2.  Userspace I/O driver (uio)
++
++Directory Structure of this Package:
++=======================================
++
++<root>
++  |
++  +-doc (documentation directory: man pages)
++  |
++  +-src
++     |
++     +- uip - the uIP stack
++     |
++     +- unix - iscsiuio source
++
++
++
++Compiling / Installing
++=======================================
++
++1.  Please untar the tarball.
++2.  Run the configure script.  This will create the Makefiles and proper
++    header files needed for the build.
++3.  Run 'make'.  This will create the binary, 'iscsiuio'
++4.  Run 'make install' to place the binaries in their installed location.
++    (The default location is '/sbin')
++
++iscsid IFACE Configuration File:
++=======================================
++The network interface configuration files are driven by the iscsid iface
++files.  The configuration data is parsed by iscsid and passed to the uIP
++stack when the connection is established.
++
++One can use the following iscsiadm commands to create/set the configuration
++using the iface files:
++
++1.  Create the iface file:
++
++      iscsiadm -m iface -I <iface name> --op=new
++
++2.  Discover the targets associated with the new iface
++
++     iscsiadm -m discovery -t st -p <iSCSI target IP address> -I <iface name>
++
++3.  Update the iface file:
++
++  To use a static IPv4 address:
++      iscsiadm -m iface -I <iface name> --op=update --name=iface.ipaddress --value=<static IPv4 address ie: 192.168.0.1>
++
++  To use a DHCP address:
++      iscsiadm -m iface -I <iface name> --op=update --name=iface.ipaddress --value=0.0.0.0
++
++  The following values are required.
++
++  To specify the bnx2i as the transport:
++      iscsiadm -m iface -I <iface name> --op=update --name=iface.transport_name --value=bnx2i
++
++  To specify the network interface to offload with:
++
++  a.  Specify the physical network interface name <ie. eth0, eth1, eth2 ...>
++      iscsiadm -m iface -I <iface name> --op=update --name=iface.net_ifacename --value=<network interface name>
++
++  b.  Specify the iSCSI MAC address of the iSCSI HBA
++      iscsiadm -m iface -I <iface name> --op=update --name=iface.hwaddress --value=<MAC address of the iSCSI HBA>
++
++4.  Now all the settings should be set so that one could connect to their
++    desired iSCSI target.
++
++      iscsiadm -m node -p <iSCSI target IP address> -T <target name> -I <iface name> --login
++
++bnx2 Limitations:
++=======================================
++*  RX iSCSI ring:
++      *  default ring size is 3 entries
++      *  default buffer size is 0x400 bytes
++*  TX iSCSI ring:
++      *  default ring size of 1 entry
++      *  default buffer size is 0x400 bytes
++
++bnx2x Limitations:
++=======================================
++*  RX iSCSI ring:
++      *  default ring size is 15 entries
++      *  default buffer size is 0x400 bytes
++*  TX iSCSI ring:
++      *  default ring size of 1 entry
++      *  default buffer size is 0x400 bytes
++
++Other Limiations:
++
++Any packets larger then the buffer size will not be sent/received by the
++hardware and will be dropped.
++
++IPv6 support:
++
++IPv6 NDP (neighbor discovery protocol), DHCPv6 and Static IPv6 are now
++supported.  The IPv6 address used for the connection will be matched against
++the DHCPv6/static IPv6 address, the RA (router advertise) address, and the
++assigned link local address.
++
++VLAN support:
++
++VLAN support is only supported when using static IP addresses.
++Also, currently only 1 VLAN is supported per physical network interface.
++Either non-VLAN offloaded traffic is allowed or VLAN offloaded traffic
++is allowed.  The current implementation does not support both at the
++same time.
++
++Currently there is no explicit VLAN attributes in the iface file.
++To configure the VLAN offload, the iface.hwaddress attribute or
++physical net_ifacename (without the VLAN identifier) must be used
++to specify the HBA device.  For the proper CNIC routing, the
++corresponding L2 interface which has the associated VLAN interface must
++have an IP address on the same subnet.
++
++The following attributes need to be filled when offloading via the
++VLAN interface:
++
++	iface.iscsi_ifacename = <name of this iface file>
++	iface.hwaddress = XX:XX:XX:XX:XX:XX
++	iface.ipaddress = XX.XX.XX.XX
++	iface.transport_name = bnx2i
++
++Setting IP address:
++
++On RHEL5.4, RHEL5.5+, RHEL6.0+, and SLES11SP1 distributions,
++discovery login is done over the Linux TCP/IP stack and L2 network
++interface.  The ethx interface corresponding to the HBA must
++therefore be in the same IP subnet in order to reach the iSCSI
++target during discovery.  However, the HBA's IP address should not
++be the same as the L2 ethx's IP address.
++
++Starting with RHEL6.1 and all other newer distributions, discovery
++using SendTargets is done over the HBA interface, so there is no
++need for the HBA and L2 network to be on the same subnet.  However,
++if VLAN is used on the HBA, they still have to be on the same subnet
++as described above.
++
++
++Setting Netmask and Gateway addresses:
++
++With the current limitations of the iface file, there are no entries
++to allow the user to enter a netmask or gateway IP address.
++
++The only way to explicitly configure these options is to use DHCP
++addressing.  Then the netmask/gateway are set on the DHCP server.
++These settings are then sent to uIP via the DHCPOFFERs.
++
++If the netmask is not defined then the netmask are automatically
++generated depending on the destination IP address.
++
++Debugging:
++=======================================
++
++By default, the iscsiuio daemon does not output any messages to the log file,
++'/var/log/iscsiuio.log'.  Message logging is only enabled when the daemon is
++run under debug mode.
++
++To run the daemon in debug mode please pass the parameter  '-d <debug level>'
++
++where the following debug levels are defined:
++
++DEBUG         4 - Print all messages
++INFO          3 - Print messages needed to follow the uIP code (default)
++WARN          2 - Print warning messages
++ERROR         1 - Only print critical errors
++
++A sample banner message:
++
++INFO  [Mon Jun 20 11:23:14 2011]Started iSCSI uio stack: Ver 0.7.0.6
++INFO  [Mon Jun 20 11:23:14 2011]Build date: Mon Jun 20 11:22:05 PDT 2011
++INFO  [Mon Jun 20 11:23:14 2011]Debug mode enabled
++
++These messages can be used to help debug any issues.
++
++When debugging issues like the iscsid, the iscsiuio daemon can be run
++in the foreground and the maximum debugging level should be used.
++
++To place the daemon in foreground mode please pass the parameter '-f'
++
++Note: The messages to the log file are not flushed unless debugging is enabled.
++
++Note:  If the daemon iscsiuio is running, one will not be able to
++       trample over the existing binary.  One might see the following message:
++
++       'cannot create regular file `/sbin/iscsiuio': Text file busy'
++
++       The solve this, please stop the iscsid service and then install.
++
++Warning:  If full debug is enabled, this may quickly fill the partition
++containing the iscsiuio logs.  This is because full debugging will log
++packet activity which on a busy network will quickly fill the logs.
++
++Note:  If the bnx2i and cnic drivers are unloaded, then iscsiuio will also
++need to be restarted so that it can determine the iscsid version.
+diff --git a/iscsiuio/RELEASE.TXT b/iscsiuio/RELEASE.TXT
+new file mode 100644
+index 0000000..48feedd
+--- /dev/null
++++ b/iscsiuio/RELEASE.TXT
+@@ -0,0 +1,2031 @@
++                              Release Notes
++                        Broadcom uIP Linux Driver
++                            Version 0.7.8.2
++                               12/10/2013
++
++                          Broadcom Corporation
++                         5300 California Avenue,
++                            Irvine, CA 92617
++
++               Copyright (c) 2004 - 2013 Broadcom Corporation
++                           All rights reserved
++
++uIP v0.7.10.2 (Feb 12, 2014)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00072504 - ifconfig shows allocation failure after
++               up/down few hours with iSCSI + L2 traffic
++      Cause:   A memory leak was discovered in the ongoing pthread creation
++               destruction code during the connection recovery process
++      Change:  Fixed the pthread creation code
++      Impact:  All
++
++
++uIP v0.7.8.2 (Dec 10, 2013)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00072053 - Some hardware iSCSI paths fail during test
++      Cause:   The test exercised a corner case where the ARP cache flush
++               mechanism didn't work properly
++      Change:  Fixed the ARP cache flush mechanism
++      Impact:  All
++
++   Enhancements
++   ------------
++   1. Change:  Added a new tx doorbell field in the uio path to work with
++               the new bnx2x/cnic drivers that supports VF_RSS
++      Impact:  10G only
++
++   2. Change:  Fixed the iface.subnet_mask decoding for IPv6
++      Impact:  IPv6
++
++
++uIP v0.7.8.1b (May 01, 2013)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Performance optimization by caching the page size
++      Impact:  All
++
++   2. Change:  Fixed a bug in the tx completion interrupt handler
++      Impact:  10G only
++
++
++uIP v0.7.6.1g (Jan 14, 2013)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00067316 - IPv6 address prefix length < 32
++               bits fails to connect
++      Cause:   CIDR notation has an order bug in the IPv6 section
++               whenever the prefix length specified is < 32
++      Change:  Fixed the network order bug
++      Impact:  IPv6 only
++
++
++uIP v0.7.6.1f (Nov 14, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00065768 - RHEL5.X iscsiuio segfault possible
++               if there is a specific 1024 byte size broadcast
++               packet
++      Cause:   This is another corner case where the packet size
++               is also exactly 1024 bytes + padding that exceeded
++               the DMA rx buffer.  The previous fix was not
++               sufficient
++      Change:  Ensure that the packet size + padding do not
++               exceed this limit.
++      Impact:  10G only.  1G already has the guard against it.
++
++
++uIP v0.7.6.1e (Nov 07, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00066397 - Unable to connect to iSCSI target
++               with NPAR enabled on 57840
++      Cause:   The PCI device ID for 57840_MF has been changed from
++               0x16ab to 0x16a4
++      Change:  Updated the PCI id table to match exactly what the
++               bnx2x 1.76 indicates
++      Impact:  57840 MF
++
++
++uIP v0.7.6.1d (Oct 31, 2012)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Added support for open-iscsi-2.0.873
++      Impact:  All
++
++
++uIP v0.7.6.1c (Oct 15, 2012)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Added support for 10G 57840 4x10 and 2x20
++      Impact:  10G 57840
++
++
++uIP v0.7.6.1b (Oct 09, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00065690 - Vconfig method of connecting over
++               tagged vlan with IPv6 failed
++      Cause:   The new net param support changes has prevented
++               the old vconfig method from execising the IPv6
++               acquisition engine properly
++      Change:  Ensure that this old vconfig method to run the IPv6
++               acquisition engine properly and to its entirety
++      Impact:  IPv6 + VLAN using the network VLAN configuration
++               method
++
++   2. Problem: Cont00065768 - RHEL5.X iscsiuio segfault possible
++               if there is a specific 1024 byte size broadcast
++               packet
++      Cause:   This is a corner case where the packet size is
++               exactly 1024 bytes + padding that exceeded the
++               DMA rx buffer.  This has been there since day 1.
++      Change:  Ensure that the packet size + padding do not
++               exceed this limit.
++      Impact:  10G only.  1G already has the guard against it.
++
++
++   Enhancements
++   ------------
++   1. Change:  Source optimization - backported source code fixes
++               as reported from the upstream submission patch
++      Impact:  ALL
++
++
++uIP v0.7.4.2k (Aug 10, 2012)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Enable HP SD mode
++      Impact:  577XX/578XX
++
++
++uIP v0.7.4.2j (Jul 18, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00064665 - Linux iSCSI connects via gateway address
++               on the wrong subnet
++      Cause:   The gateway address used was not checked against the
++               subnet mask specified before the ARP requests.  Since
++               this behavior deters from how L2 operates, therefore,
++               a change was made to correct this.
++      Change:  Added check of the gateway specified against the subnet
++               specified.
++      Impact:  Static IPv4 operation
++
++   2. Problem: Cont00064722 - Linux iSCSI unable to force IPv6 LL
++               override (advanced iface parameters)
++      Cause:   The override LL address was not being populated to the
++               IPv6 address database correctly
++      Change:  Added this correctly to the IPv6 initialization
++      Impact:  Static/DHCP IPv6 LL address override only
++
++
++uIP v0.7.4.2i (Jul 11, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00064604 - Fails to connect to routed IPv6 target
++               via RA
++      Cause:   The default router IPv6 address was not being retrieved
++               correctly.
++      Change:  Fixed the default router IPv6 address read
++      Impact:  All
++
++
++uIP v0.7.4.2h (Jun 15, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00063863 - can't boot into offload image
++               when VLAN is enabled
++      Cause:   During the iSCSI login exchange, certain iSCSI targets
++               will send an ARP request even though the TCP connection
++               has been made.  The bug was in this ARP reply where
++               the local MAC was corrupted when VLAN is enabled.
++      Change:  Fixed the ARP reply packet
++      Impact:  All
++
++
++uIP v0.7.4.2g (Jun 08, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00063816 - The initiator is not able to connect
++               to the iSCSI targets over VLAN
++      Cause:   The process packet routine did not consider the PCP
++               of the VLAN tag to be non-zero.  This created a
++               mismatch when this VLAN tag was compared against the
++               nic_iface->vlan_id which doesn't include the PCP.
++      Change:  Added the consideration of non-zero PCP
++      Impact:  All
++
++
++uIP v0.7.4.2f (Jun 04, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00063626 - Static IPv6 does not connect when
++               the prefix len is not set explicitly
++      Cause:   The IPv6 prefix length was not set correctly
++               for Static IPv6 operation when CIDR notation is
++               not specified
++      Change:  Fixed the default prefix length
++      Impact:  Static IPv6
++
++   2. Problem: Cont00063651 - Cannot connect to iSCSI targets
++               HP PTM/SF
++      Cause:   Switch-Dependent mode + invalid Outer VLAN was
++               not supported
++      Change:  Allow SD+invalid OV to fallback to SF operation mode
++      Impact:  5771X/578XX
++
++
++uIP v0.7.4.2e (May 30, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00063443 - Compilation error on SLES11sp1
++      Cause:   The iface_num field was not defined
++      Change:  Fixed all references to iface_num
++      Impact:  SLES11sp1
++
++   2. Problem: Cont00063518 - HBA fails to connect across router
++               using iface.gateway address
++      Cause:   The gateway override code did not populate the
++               address into the lower level engine
++      Change:  Fixed the gateway override code
++      Impact:  IPv4 Static IP operation
++
++   3. Problem: Cont00063567 - IPv6 LL and RA override does not work
++      Cause:   The IPv6 LL/RA override addresses were overwritten
++               by the NDP engine
++      Change:  Fixed the LL/RA override code
++      Impact:  IPv6 operation
++
++   Enhancements
++   ------------
++   1. Added support for jumbo MTU (independent from the L2 MTU)
++
++
++uIP v0.7.4.2d (May 21, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00063421 - Static IPv6 cannot connect via RA/LL
++      Cause:   The router advertise and the linklocal address
++               were corrupted due to the override capabilities
++               added for the newer open-iscsi util
++      Change:  Fixed the address override code
++      Impact:  Static IPv6
++
++   Enhancements
++   ------------
++   1. Allow VLAN tag = 1 (router management) to connect offload
++
++
++uIP v0.7.4.2c (May 09, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: RHEL BZ 734010/804580 - issues found by the Coverity
++               scan
++      Cause:   10 code issues were flagged for revision
++      Change:  Fixed all area of concern
++      Impact:  All
++
++   2. Problem: Cont00063177 - IPv4 DHCP with VLAN specification in
++               iface file gets wrong address
++      Cause:   The DHCPv4 handler was not discriminating the VLAN tag
++               associated with the DHCP offers from multiple DHCP
++               servers
++      Change:  Changed the DHCPv4 handler to drop DHCP offer packets
++               that doesn't match the VLAN tag of the intended DHCP
++               discovery packet
++      Impact:  DHCPv4 operation
++
++
++uIP v0.7.4.2b (May 01, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00062993 - IPv6 DHCP with VLAN specification in
++               iface file gets wrong address
++      Cause:   The DHCPv6 request was using the same DUID as always
++               so the non-VLAN DHCP server responded to our broadcast
++               instead
++      Change:  Changed the DHCPv6 request DUID to link address + time
++               instead of link address alone
++      Impact:  DHCPv6 operation
++
++
++uIP v0.7.4.1j (Apr 24, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00062805 - Cannot login to iSCSI targets on RHEL6.3
++      Cause:   The problem was caused by a change made to the iface_rec
++               structure in the RHEL6.3 inbox open-iscsi util
++      Change:  The new changes is now incorporated
++      Impact:  All
++
++
++uIP v0.7.4.1i (Apr 16, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00062660 - Unable to login with VLAN iscsiuio
++               on RHEL6.2
++      Cause:   The open-iscsi util in RHEL6.2 has a bug which
++               does not pass the correct iface_num to iscsiuio
++      Change:  Added workaround to fall back to do the legacy
++               VLAN support if iface_num and vlan_id = 0
++      Impact:  RHEL6.2
++
++
++uIP v0.7.4.1h (Apr 13, 2012)
++=======================================================
++   Enhancements
++   ------------
++   1. Added support for the new iface_num field in the iscsi_uevent
++      path
++
++   2. Fixed bug in the nic_iface search engine based on iface_num
++
++
++uIP v0.7.4.1g (Mar 22, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00061869 - Unable to setup an offload iSCSI
++               connection with FLR/NPAR under ESX5.0:PDA
++      Cause:   The physical function ID was previously extracted
++               from the sysfs of the VM which might not be consistent
++               to the actual physical setup due to the function
++               remapping in the hypervisor
++      Change:  Read the physical function ID directly from the BAR0
++               ME register
++      Impact:  All
++
++   2. Problem: Cont00062170 - IPv6 login/logout stress fails
++      Cause:   The packet interrupt was lost after running the test
++               for a much longer period of time.  A bug in the
++               packet processing routine was found to exit prematurely
++      Change:  Fixed the packet processing routine to process all
++               packets before exiting
++      Impact:  All
++
++
++uIP v0.7.4.1f (Mar 19, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00062170 - IPv6 login/logout stress fails
++      Cause:   The packet buffer routine for IPv6 did not take
++               network order <-> host order into consideration
++      Change:  Added a htons call to compensate for the ntohs pair
++      Impact:  All
++
++
++uIP v0.7.4.1e (Mar 08, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00061978 - Load/unload stress test fails
++      Cause:   The bnx2x open request was failing due to the module
++               request procedure.  However, the open failure was
++               not being handled correctly.
++      Change:  Fixed the device open error handling
++      Impact:  5771X/578XX
++
++
++uIP v0.7.4.1d (Mar 02, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00061708 - Unable to log into target after running
++               driver load/unload
++      Cause:   A bug was introduced in the previous bug fix (CQ61459)
++               where a pthread_cond_broadcast call was erroneously
++               enabled
++      Change:  Restored this back
++      Impact:  All
++
++
++uIP v0.7.4.1c (Feb 16, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00061529 - Unable to connect to target after an
++               initial failed login attempt until iscsi service is
++               restarted
++      Cause:   Upon a failed DHCPv4 acquisition due to the wrong VLAN
++               tag in the initial iface setup, any iscsid connect request
++               from the same NIC will get dropped due to a bug.
++      Change:  Fixed the bug which prevented new iscsid connect requests
++               from getting honored
++      Impact:  All
++
++   Enhancements
++   ------------
++   1. Updated README
++
++
++uIP v0.7.4.1b (Feb 08, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00061513 - Unable to connect to target over VLAN
++               interface
++      Cause:   The VLAN id was not properly passed back to the CNIC
++               driver for the offload request
++      Change:  Fixed the VLAN id being passed back to the CNIC driver
++      Impact:  All
++
++
++uIP v0.7.4.1a (Feb 01, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00049383 - No mechanism in iface file to support
++               gateway/routing
++      Change:  Added support for the additional network parameters
++               as passed from the newer iscsi-util.
++               These parameters include:
++               IPv4: subnet_mask, gateway
++               IPv6: ipv6_linklocal, ipv6_router,
++                     ipv6_autocfg, linklocal_autocfg, router_autocfg
++               VLAN: vlan_id, vlan_priority, vlan_state
++               Other: mtu, port
++      Impact:  All
++
++   2. Problem: Cont00060806 - Unable to connect target using DHCP over
++               tagged VLAN
++      Change:  DHCP+VLAN is a new feature enhancement that was added
++               alongside all other new iface parameters.
++      Impact:  All
++
++
++   Enhancements
++   ------------
++   1. Lock iscsid's connect request with path_req so connect requests
++      with DHCP/Static will no longer override each other
++
++   2. Fixed the if_down handler from global to nic specific
++
++   3. Fixed various synchronization issues
++
++
++uIP v0.7.2.1e (Jan 05, 2012)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00060734 - ifupdown-mtu change stress with active
++               session causes iscsiuio to fail
++      Change:  Fixed a race condition between the nic enable thread
++               and when DHCP fails
++      Impact:  All
++
++
++uIP v0.7.2.1d (Dec 28, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00060368 - segfault observed after failing both
++               mpio paths
++      Change:  Various memory leaks were identified and resolved in
++               the nic cleanup path
++      Impact:  All
++
++
++uIP v0.7.2.1c (Dec 16, 2011)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Disable HP SD mode
++
++
++uIP v0.7.2.1b (Dec 14, 2011)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Default iscsiuio logging to off.  Use the '-d'
++               option to enable
++
++
++uIP v0.7.0.14g (Oct 25, 2011)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Fixed the compilation under RHEL6.2
++   2. Change:  Added oom_adjust call to prevent OOM Killer from killing
++               iscsiuio when memory is low
++   3. Change:  Added mlockall setting to prevent page swap
++
++
++uIP v0.7.0.14f (Oct 20, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00058994 - DOS vulnerability in uip during UDP flood
++      Cause:   The warning messages from the UDP handler was logging
++               at a rate faster than the log file logrotate rate
++               Therefore, the system's OOM eventually got kicked in to
++               start terminating running processes which includes iscsiuio
++      Change:  Moved several UDP warning messages from the default log
++               level to the debug log level
++      Impact:  All (minor)
++
++   2. Problem: Cont00059288 - Show segfault w/ SLES11 SP1 Xen kernel
++      Cause:   The bnx2x chip_id was not read correctly from the PCIe BAR1
++               under the Xen kernel.  The error was in the mmap area.
++      Change:  Corrected the mmapping of the PCI MMIO space.
++      Impact:  Xen kernels
++
++   Enhancements
++   ------------
++   1. Change:  Changed the log file open error to a warning and let
++               the daemon progress.  This was only observed under iSCSI boot
++
++
++uIP v0.7.0.14e (Sep 19, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00058678 - Can not iboot target from ipv6 path
++               using VLAN
++      Cause:   A bug was found in the path request path where the vlan
++               iface's protocol family was not used correctly in the
++               iface search
++      Change:  This has been corrected
++
++
++uIP v0.7.0.14d (Sep 16, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00058602 - Can't iboot using IPv6 offload path
++      Cause:   The bug was exposed by a fix in 0.7.0.14c where the
++               IPv6 router solicitation timeout exceeded the nic
++               enable thread timeout.
++      Change:  The IPv6 router solicitation timeout has been adjusted
++
++
++uIP v0.7.0.14c (Sep 01, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00058256 - Sessions fail after loginstress to via
++               simultaneous ipv4 and ipv6 dhcp
++      Cause:   Switching between DHCPv4/v6 coupled with VLAN exposed
++               a drawback in our nic_iface architecture design where
++               VLAN is not specified by iscsid.
++      Change:  The code was optimized and improved the performance when
++               switching between DHCPv4/v6+VLAN.  However, the ultimate
++               fix is to make use of the net config parameters introduced
++               in the newer open-iscsi util which will identify the
++               specific VLAN nic_iface to use.
++
++   Enhancements
++   ------------
++   1. Change:  Added support for bnx2x-1.71.00
++
++
++uIP v0.7.0.14b (Aug 23, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00057840 - RHEL6.2 inbox: Unable to connect to
++               targets with 5709
++      Cause:   For cases when the bnx2/bnx2x driver gets removed, the
++               uio database that was built by cnic would have the device
++               ->net reference removed.  This has caused an unnecessary
++               timeout of 5s for each stale uio entry in the database.
++      Change:  Adjusted the routine which seeks the device->net entry
++               to include more logic instead of hard waiting for 5s.
++
++   Enhancements
++   ------------
++   1. Change:  Added support for RHEL6.2 for out-of-box release
++   2. Change:  Updated the man page with -h and -p info
++   3. Change:  Updated the -h info
++
++
++uIP v0.7.0.13 (Aug 10, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00057768 - iscsiuio logrotate causes daemon failure
++      Cause:   The logrotate script will send a SIGUSR1 signal to notify
++               the iscsiuio daemon of such action.  However, the daemon
++               wasn't programmed to catch this signal.
++      Change:  Restored the catching of this signal
++
++
++uIP v0.7.0.12 (Aug 04, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00050634 - brcm_iscsiuio Tainted: running IoZone,
++               Iometer and receiving a UDP flood on 3260
++      Cause:   Upon iscsiuio termination, because of the UDP flood,
++               the nic thread will be busy servicing those UDP packets
++               while the signal handling thread will free up all nic
++               resources.  The two threads were not in sync.
++      Change:  Added a nic_remove_all routine to destroy all nic threads
++               before the nic resources get freed.
++
++   Enhancements
++   ------------
++   1. Change:  Fixed all warnings as reported by RHELS' Coverity testing.
++
++
++uIP v0.7.0.11 (Aug 02, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Erroneous VLAN tag was being passed by iscsid for connect
++               request
++      Cause:   The iscsid's iface_rec_t ipc message does not contain this
++               vlan field.  This field was added in uIP for future vlan
++               support.  Since the buffer allocated to receive such message
++               in uIP didn't get initialized, therefore, garbled up VLAN
++               tag was getting used.
++      Change:  Added the initialization of this buffer.
++
++
++uIP v0.7.0.10 (Jul 26, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Can't offload when switching from Static to DHCP then back to
++               Static IPv4 when connecting through a VLAN interface
++      Cause:   The VLAN processing code did not reinstall the IP address
++               from the default nic_iface to the associated VLAN nic_iface.
++               This was only done on the very first time when the VLAN
++               interface was created and not on subsequent instances.
++      Change:  Added code to mirror the default nic_iface IP/netmask/ip_config
++               on the VLAN nic_iface on every new connection request.
++
++
++uIP v0.7.0.9 (Jul 19, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Can't offload to 57810 NPAR NIC
++      Cause:   The MF/VF variant of the PCI IDs were not supported previously
++      Change:  Added support for the MF/VF variants for 57800/57810/57840
++
++
++uIP v0.7.0.8 (Jun 30, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00056522 - Unable to connect to iSCSI target using
++               netxtreme2 package 7.0.9
++      Cause:   The iSCSI L2 ring's CID has changed from 17 to 49
++      Change:  The code now gets L2 iSCSI ring CID from the l2_buf directly.
++               This will work with any version of the cnic driver because
++               the location is a zero before this change.
++
++
++uIP v0.7.0.7 (Jun 23, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00056460 - iSCSI Offload boot RHEL5u5 x64 dropped tagged
++               packets with iSCSI Offload Boot with untagged
++      Cause:   The ICMP echo replies to the target was corrupted in both
++               1g and 10g mode
++      Change:  The code will now handle both VLAN stripped and no VLAN stripped
++               incoming packets correctly.  Also modified the transmit routine
++               to strip out any inline VLAN tag before setting up the hw to
++               insert VLAN tag.
++
++
++uIP v0.7.0.6 (Jun 21, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00056231 - DHCPv4 not working with iSCSI HBA w/
++               linux-nx2 v7.0.7
++      Cause:   The 10g L2 FW HSI has been modified for PCIe performance
++               enhancement in the 7.0.7 package (FW 1.70.20) which uIP
++               has not adapted to.
++      Change:  The eth_rx_cqe size has been increased from 32B to 64B.
++
++   Enhancements
++   ------------
++   1. Change:  The utility name has changed from brcm_iscsiuio to iscsiuio
++               as preparation for upstream submission.
++   2. Change:  Updated README
++
++
++uIP v0.7.0.5 (Jun 02, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00055915 - iSCSI does not connect on 57800 in 4-port mode
++      Cause:   The 4-port mode was not being determined correctly
++      Change:  Fixed the PORT4MODE register offset and the QZONE_ID macros
++
++
++uIP v0.7.0.4 (May 24, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00055832 - linux iscsiboot can not login to target using
++               offload path (57800)
++      Cause:   The device ID comparison routine did not take care of the case
++               when one device ID is bitwise superset of another.
++      Change:  Fixed the device ID comparison routine.
++
++
++uIP v0.7.0.3 (May. 19, 2011)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Updated all fixes to match the released uIP 0.6.4.17
++
++   2. Change:  Modified source and Copyright info as preparation for upstream
++               submission
++
++
++uIP v0.7.0.2 (May. 03, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00048972 - brcm-iscsi.log has no max size and would grow
++               to consume all free space on hard disk
++      Cause:   There was no mechanism to rotate the log
++      Change:  Added logrotate entry and SIGUSR1 signal handling for log rotate
++               action
++
++   2. Problem: Cont00054996 - Multi-session, multi-protocol mtu stress
++               does not recover all sessions
++      Cause:   A segfault was observed during the load/unload module.  The
++               problem was caused by an illegal dereference of a pointer
++               when IPv6 couldn't find the longest match address from
++               the ARP (Neighbor) table.
++      Change:  Fixed the dereferencing error
++
++   3. Problem: Cont00054900 - Linux uIP - Please add ability to connect
++               to routed target with static iface IPv6
++      Cause:   Static IPv6 never runs the IPv6 NDP router sol/adv engine.
++      Change:  IPv6 NDP router sol/adv has now been added to static IPv6
++               operation.
++
++   4. Problem: Cont00054996 - Multi-session, multi-protocol mtu stress
++               does not recover all sessions
++      Cause:   Segfaults were observed caused by the accessing of the IPv6
++               NDP structure while the nic is undergoing a reset either
++               due to a DHCPv4 request from iscsid or the handling of
++               if_down due to the NL handler from CNIC.
++      Change:  The fix involves the following:
++               - Fixed the handling of staggered IPv4/v6 DHCP/static requests
++               - Fixed memory leak due to reallocation of IPv4 and IPv6
++                 DHCP structs
++               - Fixed the pthread join stuck problem in the handling
++                 of the if_down NL message
++
++   5. Problem: Cont00054810 - Linux NMI - bnx2x_init_hw_common:PXP2 CFG
++               failed running iSCSI MTU stress test
++      Cause:   This only happens in DHCPv4 mode.  The problem was caused
++               by contention between the elongated window of performing
++               DHCP in the enable_nic thread while receiving the asynchronous
++               if_down NL message (from the MTU change event) from the
++               CNIC NL thread.  The problem occurs when the enable_nic
++               thread tries to call bnx2x_open while the other thread
++               calls the bnx2x_close routine.
++      Change:  Fixed mutex lock bugs for the enable_nic thread.  Also
++               extended the nic_disable timeout to 10s to compensate for
++               the DHCP operation.
++
++   6. Problem: Cont00054818 - RH6.0 - Unable to logout of iSCSI session
++               after running PQA baseline scripts
++      Cause:   This was caused by the call to cancel the enable_nic
++               thread when disabling the nic but failed to unlock the
++               nic mutex that the enable_nic thread held.
++      Change:  Wake up the enable_nic thread and wait for it to complete
++               instead of canceling it in the nic_disable path.
++
++   7. Problem: Cont00054725 - Previous static HBA IP will be used after
++               a new static HBA IP has been created
++      Cause:   There was an assumption in the code where if the same
++               nic_iface structure was found based on the nic/vlan pair,
++               the specified IP address would not be used.  Instead, it
++               will continue to use the previous defined IP address.
++      Change:  The previous IP address will now be compared against the
++               the specified IP address before finishing the parce
++               iface request from iscsid.  If different, the current
++               nic will be disabled and then re-enabled with the newly
++               specified IP address.
++
++   8. Problem: Cont00054571 - Unable to connect to routed ipv6 target
++               with RA address and iface DHCPv6
++      Cause:   The default router address was not being employed for
++               the IPv6 neighbor negotiation.  Additionally, the return
++               address of our neighbor advertisement was incorrect as
++               it should use the best matched src address instead.
++      Change:  Fixed both the IPv6 neighbor solicitation and advertisement
++               transmission and handling.
++
++   9. Problem: Cont00054510 - fails to login to 32 session with blanket
++               login IPv6
++      Cause:   A bug was introduced in uIP 0.6.4.6 where the NIC_RUNNING
++               flag might not be set when entering the main loop under
++               certain situations depending on the nic bring up.
++      Change:  A new NIC_STARTED_RUNNING flag is now defined to fix CQ53511.
++
++  10. Problem: Cont00053807 - RA and link local are unable to connect if DHCPv6
++               fails
++      Cause:   The host link local address was not being searched as one of
++               the host address to be replied to CNIC for the connect request.
++      Change:  The path reply now includes the search of host link local
++               address as well.
++
++  11. Problem: Cont00054236 - iSCSI service must be restarted before an IPv6
++               connection can be made to the Equalogic target
++      Cause:   The problem was intermittent as it depends on which IPv6 address
++               the target was redirecting to.  Since uIP was only extracting
++               the target's IPv6 address + MAC from the target's neighbor
++               advertisement packet itself and not from the ICMPv6 option, so
++               the wrong or no MAC address will get send down to CNIC for the
++               connection establishment; hence the no connect.
++      Change:  Added the updating of the neighbor discovery table to also use
++               the Target IPv6 address + MAC specified in the incoming neighbor
++               advertisement's ICMPv6 option field.
++
++  12. Problem: Cont00053255 - bnx2x panic dump logging into multiple
++               discovered IPv6 nodes (Equalogic IPv6 target)
++      Cause:   The bnx2x panic was fixed in the 10g fw 6.4.29.
++               A IPv6 connectivity issue was then found and led to different
++               kernel/uIP crashes.  This was caused by the same IPv6
++               connectivity problem mentioned above.
++      Change:  Same as above
++
++  13. Problem: Cont00053728 - Sessions never recover after doing initiator-side
++               cable pull test with IPv6 traffic against Equalogic targets
++      Cause:   It was discovered that the Equalogic would send out periodic
++               neighbor solicitation to maintain the connection to the
++               initiator.  Since uIP was responding with the assigned IPv6
++               link local address in the neighbor advertisement
++               unconditionally, the target was observed to stop transmitting on
++               the connection specified.
++      Change:  The neighbor advertisement generated will now use the dst IPv6
++               address from the input neighbor solicitation packet instead of
++               the assigned IPv6 link local address for both the packet and the
++               ICMPv6 source IPv6 address.
++
++  14. Problem: Compile error under 32-bit OS
++      Cause:   A bug was introduced in the previous release 0.6.4.6 which
++               caused a compilation error in 32-bit OS (64-bit compiles
++               fine)
++      Change:  Fixed the bug
++
++  15. Problem: Cont00053807 - RA and Link local are unable to connect if dhcpv6
++               fails
++      Cause:   There was a bug in the nl reply where the RA address will never
++               be sent back to CNIC for the connection request
++      Change:  The best matched address to the dst will now be sent back to
++               CNIC in the path rsp.
++
++   Enhancements
++   ------------
++   1. Change:  Updated README to remove the 57713/E references
++
++   2. Change:  Allow the ICMP option field in the IPv6 Neighbor Advertisement
++               response to be included without discrimination.  This fixes
++               an issue connecting against the EQL via RA for DHCPv6.
++
++   3. Change:  Updated README for the IPv6 operation, VLAN, and discovery.
++
++
++uIP v0.7.0.1 (Mar. 29, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00053511 - bnx2x panic dump during ifup/down stress with
++               iSCSI traffic
++      Cause:   The panic dump was resolved by the driver's rq dbell size fix.
++               After that, uIP crashed due to the asynchronous if_down event
++               that took the chip resources away while the nic thread is still
++               continuing to try to send DHCP request.
++      Change:  Added synchronization between the two threads so proper clean up
++               of the threads can occur.
++
++   Enhancements
++   ------------
++   1. Change:  Added support for E3 (57800, 57810, and 57840)
++
++
++uIP v0.6.4.5 (Mar. 23, 2011)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Optimized the double VLAN fix of CQ53870 to match
++               what will be submitted for RHELS5.7 and RHELS6.1 inbox
++
++
++uIP v0.6.4.4 (Mar. 17, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00053870 - Unable to login to iSCSI target via offload
++               through a Nexus 5020 switch with DCBx enabled
++      Cause:   Double VLAN tagging was observed due to DCBx enabled.
++               The chip actually adds a VLAN tag if the txbd does not have
++               VLAN tag enabled under the DCBx environment for PRI setting.
++               Since uIP does not make use of hw assisted VLAN tagging,
++               2 VLAN tag was observed in the data stream.
++      Change:  Enabled hw assisted VLAN tagging in uIP for both 1g and 10g.
++
++   2. Problem: Cont00053792 - maxconnections intermittently fail and
++               recover using iface DHCPv4
++      Cause:   The DHCPv4 engine erroneously keeps on requesting for a
++               new lease which tremendously hamper normal path_req
++               operation.  The problem is that the lease time parameter
++               has overflowed when converted to ticks count.
++      Change:  Expanded the lease timer ticks count parameter from 16 to
++               32 bits.
++
++   3. Problem: Cont00053807 - RA and link local are unable to connect if
++               DHCPv6 fails
++      Cause:   The DHCPv6 engine does not have the failover to use RA
++               mechanism
++      Change:  Expanded to use best match address instead regardless of
++               DHCPv6 success or not, or using static v6.
++
++   Enhancements
++   ------------
++   1. Change:  Cont00051823 - Added man page for brcm_iscsiuio
++
++
++uIP v0.6.4.3 (Mar. 15, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00053719 - intermittent logging into targets that
++               are not in the same subnet as defined in the iface
++      Cause:   The default route was used erroneously due to a miscompare
++      Change:  Fixed this comparison so if the requested dst is not in
++               in the same subnet, uIP would not even ARP out.
++
++   2. Problem: Cont00053580 - Unable to do iSCSI boot into Linux OS using
++               57710 adapters
++      Cause:   The E1 iro USTORM_RX_PROD_OFFSET doesn't match the t6.4 fw
++      Change:  This is now fixed
++
++
++uIP v0.6.4.2 (Feb. 24, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00050343 - HBA does not follow RFC2131 spec for IPv4
++               DHCP lease expiration
++      Cause:   The dhcp engine did not have this feature implemented
++      Change:  Added lease time tracking and renewal
++
++   2. Problem: Cont00050801 - Unable to connect to target after switching
++               between DHCPv4 to static v4
++      Cause:   The configuration flags got corrupted when switching between
++               dhcp and static or vice versa.
++      Change:  Fixed the flag handling.  Also needed to zero out the static
++               ip address in the host memory when switching to dhcp.
++               Otherwise, the static ip address will get used mistakenly.
++
++   Enhancements
++   ------------
++   1. Change:  Cont00051936 - Added IPv6 NDP and DHCPv6 support.
++
++
++uIP v0.6.4.1 (Jan. 27, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00049766 - segfault seen while stopping iscsi service
++      Cause:   The logger output routine was accessing the log resource
++               while another thread calls fini_logger to free the same
++               resources
++      Change:  Added pthread mutex lock to the logger routine to exclude
++               the initializer, user, and finisher
++
++   Enhancements
++   ------------
++   1. Change:  Added new t6.4 HSI and 57713 support.
++
++
++uIP v0.6.2.13 (Jan. 04, 2011)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00049665 - iscsiboot:linux failed to boot into iscsi
++               boot image in offload path after 5 iterations
++      Cause:   The hw consumer index for the uIP ring got out of sync
++               with the producer index.  This has led to the xmit mutex
++               lock be held forever so subsequent ARP requests will not
++               get transmitted to the wire
++      Change:  Added this out of sync detection and rescue the xmit mutex
++               lock
++
++uIP v0.6.2.12 (Dec. 21, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Cont00051820 - Session fails to reconnect after gateway
++               fallback
++      Cause:   Under the HSRP test scenario, it was found that an ARP
++               request from the SUT is required in order for the HSRP
++               router to begin sending packets downstream to the SUT.
++               The default ARP age was originally set to 20 minutes
++               before a new ARP request will get sent,
++      Change:  Changed the ARP age default to Linux default at 5 minutes
++
++uIP v0.6.2.11 (Dec. 17, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: For IPv4, the gateway route was not being utilized
++               when the subnet mask given or calculated does not
++               match.  This resulted in many unwanted connection
++               attempts.
++      Cause:   A bug was found in the default gateway calculation
++               logic which prevented the gateway address from being
++               used.
++      Change:  Fixed the default gateway logic
++
++   2. Problem: For IPv6, there are scenarios where it won't connect
++      Cause:   The IPv6 subnet mask as extracted from the CIDR
++               format might contain garbage data.  This garbage data
++               was then used as part of the subnet mask which would
++               prevent the correct address mask.
++      Change:  Fixed the subnet mask
++
++uIP v0.6.2.10 (Dec. 15, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: IPv6 does not connect for non-CIDR iface.ipaddress
++               specification
++      Cause:   A bug where all ones was used as the IPv6 netmask
++               instead of all zeroes.  This prevented all IPv6
++               path requests from being honored
++      Change:  Fixed the subnet mask used
++
++uIP v0.6.2.9 (Dec. 14, 2010)
++=======================================================
++   Enhancements
++   ------------
++   1. Change:  Added IP address CIDR notation support for the
++               iface.ipaddress field in the iface file.
++               This will allow subnet mask to be defined and used.
++
++uIP v0.6.2.8 (Dec. 9, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: ipv6 + ifup/down fails to reconnect
++
++      Cause:   There were 2 problems found:
++               - the xmit_mutex lock was being held indefinitely
++               - the nl_process_if_down flag for 10g doorbell ringing
++                 did not get reinitialized
++
++      Change:  Fixed the xmit_mutex deadlock via trylock
++               Added nl_process_if_down initialization in the IF_DOWN
++               process
++
++   2. Problem: Added fix for the NPAR disabled for 57712
++
++      Cause:   The mac address was not handled correctly
++
++      Change:  Fixed the mac address handling.  Also requires corresponding
++               kernel component for the complete fix
++
++uIP v0.6.2.7 (Dec. 7, 2010)
++=======================================================
++   Enhancements
++   ------------
++   1. Change: Use the gateway address from the DHCP server the
++              destination IP address is not in the current subnet.
++
++uIP v0.6.2.6 (Nov. 16, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Warning message seen in the kernel logs,
++               "uio uio2: uevent: unsupported action string"
++
++      Cause:   The improper string was echo'ed into the UIO trigger
++               field.  With an improper string, this message would
++	       appear in the kernel logs.
++
++      Change:  uIP will now write the string "online" to the UIO
++               trigger field.  This is the string expected by the
++	       Linux kernel base driver.
++
++   2. Problem: uIP would segfault during a heavily login/logout
++               iSCSI subsystem reset senario
++
++      Cause:   A double free occurred in the logging portion of the
++               uIP code, but this was root cause to a double free when
++	       manipulating the NetLink buffers.
++
++      Change:  Properly look at the return code from the routine which
++               will read NetLink messages.  Also only free buffers
++	       if they are allocated.
++
++   Enhancements
++   ------------
++   1. Change: Add ability to print kernel version and machine
++              architecture to further help debug problems.
++
++   2. Change: Apply the netmask from DHCP if provided.
++
++uIP v0.6.2.5 (Nov. 10, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: iscsid would try to conenct with unintended iSCSI
++               targets
++
++      Cause:   uIP would blindly return the iSCSI target MAC address
++               regardless if the iSCSI target is reachable via the
++	       given port.
++
++      Change:  uIP will try to filter the requests coming from CNIC
++               by automatically generating a network mask based off
++	       the configured IP addressed.  Then this netmask is
++	       masked with the destination IP address.  If there is
++	       a match, then the path_req is allowed through.
++
++   2. Problem: Problems reconnecting back to the target when running
++               MTU stress tests.
++
++      Cause:   cnic/bnx2i and uIP could possibly get out of sync when
++               an if_down message is sent.
++
++      Change:  uIP will now immediately react to the if_down message,
++               and flush all the path req's and then to process to
++               if_close.
++
++   Enhancements
++   ------------
++   1. Change: Fix compile warnings for src/unix/nic_nl.c,
++              and src/unix/main.c
++
++uIP v0.6.2.4 (Nov. 4, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: iSCSI HBA: brcm_iscsiuio segfault during ifdown
++               with many active sessions
++
++      Cause:   uIP will segfault when traversing the error path when
++               an iSCSI connection is starting but the sysfs entries
++	       have not been created yet.
++
++      Change:  Use the errno value rather then the one from the file
++               descriptor because the file descriptor will be NULL and
++	       the NULL dereference will cause a segfault.
++
++   Enhancements
++   ------------
++   1. Change: Added initial changes for iSCSI multi-function support for
++              10G NIC's.
++   2. Change: Add more detailed messages for error pathes in nic_utils
++
++uIP v0.6.2.3 (October 28, 2010)
++=======================================================
++   Enhancements
++   ------------
++   1. Change: Add support for bnx2x-1.62.x drivers
++
++uIP v0.6.2.2 (October 18, 2010)
++=======================================================
++   Enhancements
++   ------------
++   1. Change: Only allow iSCSI connections with known bnx2x HSI's.
++
++uIP v0.6.2.1 (October 7, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: After multiple MTU changes, the ethtool IOCTL used to
++               determine the bnx2x driver version fails and eventually
++	       iSCSI connections would not reconnect.
++
++      Cause:   The socket file descriptor used during the ethtool IOCTL
++               call was never closed and leaked.
++
++      Change:  On the error path when calling the ethtool IOCTL, the
++               file descriptor is now properly closed.
++
++uIP v0.5.39 (September 15, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Could not offload IPv4 VLAN connection when the target tries
++               to ARP the iSCSI initiator
++
++      Cause:   In the ARP reply, the ether field was incorrect.
++
++      Change:  Properly set the ether field to 802.1Q type (0x8100)
++
++uIP v0.5.38 (September 14, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: uIP would cause a panic dump when the NIC was going down
++
++      Cause:  uIP and CNIC where not synchonized on NIC state
++
++      Change:  Check if the RX BD's which are zero'ed by CNIC when the
++               NIC is going down.  If the BD addresses are zero, then
++	       uIP will drop the TX packets.
++
++uIP v0.5.37 (August 21, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: uIP would segfault on ifup/ifdown stress test when using
++               DHCP to determine local IP address.
++
++      Cause: The uIP would use a NULL buffer during data transmission.
++
++      Change:  Drop packets when there are no buffer avaliable.
++
++uIP v0.5.36 (August 21, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: iSCSI boot would not completely login after the pivot
++               root operation.
++
++      Cause: The uIP would not properly start the NIC interface.
++
++      Change: uIP should only check the NIC state to determine whether
++              to start the NIC thread or not.
++
++   2. Problem: uIP would segfault during if'up if'down testing.
++
++      Cause: The uIP would improperly start 2 NIC threads for the
++             same NIC interface.
++
++      Change: uIP should properly lock the NIC list when disabling/removing
++              the NIC threads.
++
++
++uIP v0.5.35 (August 20, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Sessions would hang with ethtool self-test
++
++      Cause: The uIP would hang because the socket layer was stuck
++             because there is much contention for that socket.  This
++             would hang the CNIC thread.
++
++      Change: Remove any IOCTL calls in uIP which may colide with
++              the ethtool self test.  The driver version is only
++              capture during uIP initialization.
++
++   2. Problem: There were session recovery issue when using DHCP
++               if up/down tests.
++
++      Cause: The uIP would hang because the DHCP requests would
++             timeout if the network interface is downed which would
++             hang all the other uIP threads.
++
++      Change:  Ensure that the DHCP state machine had exit points
++               if the network interface was down'ed.
++
++
++uIP v0.5.34 (August 18, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Sessions would not recover with ethtool self-test
++
++      Cause: The uIP would hang because either the NetLink buffer is
++             full or that any socket operations used to manipulate
++             multicast addresses would block.
++
++      Change: Ensure that the socket used for multicast addressing is
++              set to nonblocking.  Drain the NetLink buffer without
++              using the eventing, but with a more aggressive poll routine.
++
++   2. Problem: Sessions would not recover with L2 driver load/unload on
++               RHEL 6.0 SS9
++
++      Cause: The uIP would close the NIC thread too early and would
++             deadlock on cloing the NIC thread.
++
++      Change: Ensure that the NIC thread is canceled/closed only in one
++              location, in the NIC remove routine.
++
++
++uIP v0.5.33 (August 17, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Error message seen from the uIP stack for valid packets.
++
++      Cause: The uIP was incorrectly marking logging messages for valid
++             packets as errors because it didn't know how to parase them.
++
++      Change: Changed the following from error to debug message
++                ipv6: invalid version
++                ipv4: invalid version or header length.
++                icmpv6: unknown ICMP message.
++                ip: neither tcp nor icmp
++              Changed the following from error to warn message
++                udp: bad checksum
++                tcp: bad checksum
++                tcp: got reset, aborting connection.
++
++   2. Problem: After multiple iterations the loading and unloading of
++               the Broadcom Linux drivers with active connections
++	       would not cause the sessions to recover on RHEL 6.0
++	       snapshot 9.
++
++      Cause:  There was a deadlock in the nic mutex
++
++      Change:  Lock ordering for the nic mutex and nic list mutex must
++               be inforced.
++
++   3. Problem: After multiple iterations of running the ethtool selftest
++               the Broadcom Linux drivers with active connections
++	       would not cause the sessions to recover on RHEL 5.5.
++
++      Cause: The Netlink buffer between uIP and CNIC would get full.
++
++      Change:  Poll more regularly for packets in the Netlink buffer
++               from 4 times a second to 100 times a 1 second.
++               Drain packets during the PATH_REQ packet pull.
++
++
++uIP v0.5.32 (August 14, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Error message 'nic eth0: Didn't find type 0xaa bb' seen.
++
++      Cause: Valid non-DIX Ethernet packets as being passed to the
++             uIP.  uIP will drop these packets but should be logged
++	     correctly.
++
++      Change: These packets are valid, and should only be logged for
++              debugging purposes.
++
++   2. Problem: Error message 'Dropped previous transmitted packet' seen.
++
++      Cause: The TX ring is full, and here uIP is trying to transmit a
++             packet which will be dropped.  This is a valid state but
++	     the log message is marked incorrectly
++
++      Change: These messages are not warnings and should be logging when
++              debugging is enabled.
++
++   3. Problem: Error message: "iscsi_ipc eth0 Transport name is not
++               equal expected:  got: bnx2i" seen.
++
++      Cause:  The iface_rec structure is different between iscsid version.
++              For RHEL 5.5, iscsid is versioned 871, for RHEL 6.0 is
++	      versioned 872.
++
++      Change: Allow uIP to compile against a different version of iscsid.
++
++
++uIP v0.5.31 (August 12, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Softlock would occur showing that the NetLink table
++               lock was taken but never released.
++
++      Cause: NetLink socket buffer would fill with constant PATH_REQ
++             messages preventing PATH_REQ response from libiscsi
++
++      Change: Now uIP will drain the NetLink buffer while looking for
++              a response.
++
++   Enhancements
++   ------------
++   1. Change: Add documentation for VLAN configuration and restrictions.
++
++
++uIP v0.5.30 (August 6, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: iscsid thread will stall if closing the uio files nodes
++               is stuck
++
++      Cause:  uIP would indefinitely block waiting for the mutex shared
++              by the close routine.
++
++      Change: Now uIP will try and poll a bit for the mutex.  If it can't
++              get this mutex in the iscsid thread then an error is return
++	      rather then hold the thread.
++
++   2. Problem: IPv6 Unicast Neighbor Adveriserments would have the
++               ICMPv6 option header specifying a MAC.
++
++      Cause:  uIP should use the source IPv6 address to detmine whether
++              to strip the option header or not and not the target address
++	      in the ICMPv6 field.
++
++      Change:  The uIP stack return a unicast IPv6 Neighbor Advertisement
++               without the ICMPv6 option as a response to unicast
++	       IPv6 Neighbor Solicitations.
++
++   3. Problem: There would be TCP SYN packets with improper MAC address.
++
++      Cause:   A zero'ed MAC address was not passed to CNIC to indicate an
++               error or if the IP address didn't resolve.
++
++      Change:  The uIP stack will now return a zero'ed MAC address if it
++               can't find any entries.
++
++
++uIP v0.5.29 (August 6, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: "uip udp: no matching connection found: lport: 35072"
++               seen numerous times in the brcm_iscsiuio log file
++
++      Cause:  This message was incorrectly marked as an error
++
++      Change: These messages are valid log entries especially if the
++              packet was a broadcast UDP packet not destined for the SUT
++              I will change the code to mark these logs entries as debug.
++
++
++uIP v0.5.28 (August 5, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Can't login into a redirected Equilogic Target
++
++      Cause:  The Equilogic Target uses a unicast IPv6 Neighbor
++              Solicitation to test if the host is up.  The uIP stack
++	      would return a Neighbor Advertisement with an unneeded
++	      ICMPv6 option.
++
++      Change: Only have the uIP stack return a unicast IPv6 Neighbor
++              Advertisement without the ICMPv6 option.
++
++   2. Problem: With older bnx2/bnx2x/cnic/bnx2i driver combinations
++               uIP would segfault when these drivers were unloaded.
++
++      Cause:  When the older drivers were removed, the underlying uio
++              instance was removed causing uIP to have a stale file handle.
++	      When uIP finally closes using this stale file handle, either
++	      uIP would segfault, or there would be an error in the
++	      uio_release() path.
++
++      Change: Only have the uIP close if the UIO file node exists.
++
++
++uIP v0.5.27 (July 31, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: iSCSI HBA: Unable to use DHCP address for iSCSI interface
++               if a connection was previously made with a static address
++	       on bnx2 devices.
++
++      Cause:  Because the device is closed and reopen'ed the TX consumer
++              indexes were not persisted
++
++      Change: Only discard the TX consumer indexes only when the devices
++              will be discarded or closed
++
++   Enhancements
++   ------------
++   1. Change: Change CNIC references to bnx2 in the bnx2 user space
++              driver.
++
++
++uIP v0.5.26 (July 30, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: iSCSI HBA: Unable to use DHCP address for iSCSI interface
++               if a connection was previously made with a static address on
++	       bnx2x devices.
++
++      Cause:  Because the device is closed and reopen'ed the TX consumer
++              indexes were not persisted
++
++      Change: Only discard the TX consumer indexes only when the devices
++              will be discarded
++
++   2. Problem: IPv6 using VLAN's didn't login
++
++      Cause:  The uIP code used to determine if the packet was an IPv6
++              or not was not working.  This VLAN packets for IPv6 were
++	      being mis-interpreted.
++
++      Change: Make the function is_ipv6() VLAN aware
++
++   3. Problem: Persistant targets was not loggin in during boot
++
++      Cause:  If udev was slow and the /dev/uio* were creatly slowly
++              uIP would fail.
++
++      Change: Poll uIP waiting for /dev/uio* file nodes.
++
++uIP v0.5.25 (July 27, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: When using IPv4 DHCP, there are no initial DHCP Discover
++               packets were not seen on the wire.
++
++      Cause:  Packets generated from the app handler from the uIP stack
++              were not placed on the wire.
++
++      Change: Packets originating from the uIP stack are now always placed
++              on the wire.
++
++uIP v0.5.24 (July 25, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: One would see invalid packet packets flow through the
++               uIP stack, where the logs would indicate there is a packet
++               with an invalid length
++
++      Cause:  The BD and CQE consumer indexes were not properly incremented
++              and masked.
++
++      Change: The BD index is now properly masked.  The CQE index is not
++              incremented using the CQE index rather the mistaken BD index.
++
++      Impact: 10G only
++
++   2. Problem: uIP would segfault during the booting of the machine.
++
++      Cause:  uIP was using a NULL data pointer because there was an
++              incorrect packet passed to the stack.
++
++      Change: Only allow uIP to process data if the packet exists.
++
++   3. Problem: uIP would stop processing packets
++
++      Cause:  The uIP code would not properly drain the CQE ring causing
++              it to eventually be full
++
++      Change: Consume all the CQE elements even if they are ethernet types
++              or not.
++
++      Impact: 10G only
++
++   4. Problem: uIP would stop after if/down of the network interface.
++
++      Cause:  uIP was not kick starting the NIC loop thread properly.
++
++      Change: Ensure that the NIC loop thread is started by when iscsid
++              request that the interface start the offload.  Mark the NIC
++	      only if the thread is truly canceled.
++
++
++uIP v0.5.23 (July 20, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem:  Segfault during brcm_iscsiuio initialization
++
++      Cause:  uIP was using a NULL data pointer, because a different
++              thread re-initialized the uIP stack
++
++      Change: Properly synchronize the initialization of the stack
++
++   2. Problem:  Deadlock during the printing of heavy debug messages
++
++      Cause:  The variable macro structures would point to invalid
++              data
++
++      Change:  With each invocation of va_copy() a corresponding
++               invocation of va_end() in the same function for the proper
++	       cleanup
++
++   3. Problem:  uIP would hang when the interface could go up/down
++
++      Cause:  uIP would get out of sync with the state of the network
++              interface
++
++      Change:  Instead of detriving state from the UIO file nodes, uIP
++               will take direction from iscsid on when interfaces will be
++	       started.
++
++uIP v0.5.22 (July 15, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem:  Unable to reconnect via iSCSI offload after
++		ifup/ifdown
++
++      Cause:  uIP was stuck on the thread when closing the NIC main
++              loop
++
++      Change: Properly synchronize the NetLink CNIC and uevent threads
++
++   2. Problem:  uIP would crash during boot up.
++
++      Cause:  uIP would overwrite a memory location which was already
++              freed during nic_remove().
++
++      Change: Since the NIC is freed there is no need to write to
++              update the NIC flags
++
++   Enhancements
++   ------------
++
++   1. Change:  Added IPv6 Link Local support
++
++
++uIP v0.5.21 (July 5, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem:  Unable to connect via iSCSI offload after
++		changing L2 address
++
++      Cause:  uIP didn't notice the network inferface going down
++
++      Change: Allow uIP to persist the stack's IP address after
++              a reset
++
++   2. Problem:   Unable to connect via IPv4 and IPv6 concurrently
++
++      Cause:  uIP didn't notice the network inferface going down
++
++      Change: Allow uIP to persist the stack's IP address after
++              a reset and properly bring up the interface
++
++   3. Problem:   Unable to connect via VLAN
++
++      Cause:  IP address was no persisted after a device reset
++
++      Change: When CNIC requests a path request, uIP will use the
++              VLAN passed by the CNIC.
++
++
++uIP v0.5.20 (June 24, 2010)
++
++
++uIP v0.5.20 (June 24, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Certain IPv6 addresses are not repsonded to by
++               the target.
++
++      Cause:  The MAC was generated from the target's IPv6
++              address not the deterived multicast IPv6 address.
++
++      Change: The destination MAC address should be deterived
++              from the packet's destination IPv6 address and
++	      not the target.
++
++   2. Problem: brcm_iscsiuio would segfault when L2 interface is
++               bought up and down after being logged into
++
++      Cause:  The NIC thread was not stopped properly
++
++      Change: When the UIO device is remove and when the
++              cooresponding NIC tracked by brcm_iscsiuio, the
++	      daemon would properly wait for the NIC thread to
++	      stop.
++
++
++uIP v0.5.19 (June 22, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Can't login after boot
++
++      Cause:  If NIC interfaces are brough up and down quickly
++              uIP wait on an invalid NIC thread
++
++      Change: Only wait for the NIC thread if the NIC thread
++              exists.
++
++uIP v0.5.18 (June 21, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Does not compile on SLES 11 SP1
++
++      Cause:  Automake cached files were included as part of the
++              uIP-0.5.17 package
++
++      Change: Remove automake cached files, and allow these files
++              to be generated each time the source is compiled
++
++   2. Problem: Does not always receive multicast packets
++
++      Cause:  Multicast bit was not set in SORT USER 2 register
++
++      Change: brcm_iscsiuio will now set the SORT USER 2 registers
++              with both the broadcast and multicast bits.
++
++   3. Problem: Existing iSCSI connections do not reconnect after
++               operations which require equivalent driver
++	       load/unload operations
++
++      Cause:  Multiple path requests would trample NIC configurations
++
++      Change: Allow only one path request at a time
++
++uIP v0.5.17 (June 16, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: IPv6 neighbor solicitations from brcm_iscsiuio could
++               not be responded to
++
++      Cause:  The IPv6 neighbor solicitation packet had an invalid
++              multicast MAC address
++
++      Change: Properly set the MAC address multicast bit and OR
++              with the IPv6 destination address
++
++   2. Problem: NIC state was not properly synchronized and noticed
++               by Shyam Iyer <shiyer at redhat.com>
++
++      Change: Properly lock the NIC device when changing state
++
++   Enhancements
++   ------------
++
++   1. Change: Listen for iscsid before daemonizing to close a timing
++              gap which might allow iscsid to start before uIP is
++	      completely initialized.
++
++uIP v0.5.16 (June 2, 2010)
++=======================================================
++
++   Enhancements
++   ------------
++
++   1. Change: Formally add IPv6 support.  Only a static IPv6 address
++              is supported.
++
++uIP v0.5.15 (May 20, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: brcm_iscsiuio would echo packets off the wire
++
++      Cause:  Stale packets from the uIP stack could potentially
++              make it onto the wire causing a network flood
++
++      Change: Only place on the wire packets uIP intended to place
++              on the wire.  Drop all other packets.
++
++uIP v0.5.14 (May 18, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: brcm_iscsiuio would crash when offloading using a
++               bnx2x device /dev/mem could not be
++               opened, (ie. SE Linux enabled)
++
++      Cause:  /dev/mem could not be opened, (ie. SE Linux enabled)
++              and then the NIC would be improperly initialized.
++
++      Change: If /dev/mem is not able to be opened, then the device
++              is closed
++
++   2. Problem: brcm_iscsiuio would crash when brcm_iscsiuio is
++               being shutdown
++
++      Cause:  The NIC mutex was deferenced imporperly when the NIC
++              is being closed
++
++      Change: Take the NIC mutex lock only when the NIC is closed.
++
++uIP v0.5.13 (May 16, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: brcm_iscsiuio would crash with heavy traffic directed
++               at the iSCSI traffic
++
++      Cause:  Packets which are sized between 1006-1024 bytes would
++              crash brcm_iscsiuio because brcm_iscsiuio is not sized
++	      to handle such large packets
++
++      Change: Drop large packets, properly hold the NIC mutex lock
++              for the duration when NIC fields are being used.
++
++
++uIP v0.5.12 (May 13, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: brcm_iscsiuio could crash on when L2 interface is
++               ifdown'ed
++
++      Cause:  The local NIC pointer was not initialized properly
++              in the routine parse_iface()
++
++      Change: Properly initialize the NIC pointer
++
++   2. Problem: Documentation referred to older admin_client which
++               doesn't exist any more because brcm_iscsiuio uses
++	       the iscsid iface file
++
++      Change: Remove the stale references
++
++
++uIP v0.5.11 (May 11, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: brcm_iscsiuio could crash on invalid packet sizes
++
++      Cause:  The hardware BD could be a large value because of a
++              hardware error
++
++      Change: Limit the size of the packet dumped to the MTU size
++
++   Enhancements
++   ------------
++
++   1. Change: During the running of the configure script now
++              the script will check for ar and ranlib binaries
++
++
++uIP v0.5.10 (May 03, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: BCM57712 not recognized
++
++      Cause:  The PCI ID's in the bnx2x file were missing.
++
++      Change: Added proper BCM57712, BCM57712E, BCM57713, BCM57713E
++              PCI ID's
++
++   2. Problem: (CQ 47481) brcm_iscsiuio not installed in correct location
++
++      Cause:  Default install path for autoconf is /usr/local
++
++      Change: Change the default prefix to '/' so the brcm_iscsiuio
++              binary is installed to /sbin/
++
++   Enhancements
++   ------------
++
++   1. Change: Remove dependency on Yacc and Lex
++
++
++uIP v0.5.9 (April 28, 2010)
++=======================================================
++
++   Fixes
++   -----
++   1. Problem: bnx2x T6.0 driver would not login
++
++      Cause:  The bnx2x code was not using the T6.0 HSI offsets
++
++      Change: Determine to bnx2x driver version eariler to properly use the
++              T4.8 or T6.0 HSI
++
++   Enhancements
++   ------------
++
++   1. Change: Collapse all the various locks to use the NIC lock to shrink
++              memory footprint
++
++   2. Change: Consolidate upper layer checksumming code
++
++
++uIP v0.5.5 (March 02, 2010)
++=======================================================
++
++   Enhancements
++   ------------
++
++   1. Change: Add support for T6.0 bnx2x HSI and 57712.
++
++   2. Change: Initial support for IPv6
++
++uIP v0.5.8 (April 22, 2010)
++=======================================================
++
++   Enhancements
++   ------------
++
++   1. Change: Add support for T6.0 bnx2x HSI and 57712.
++
++   2. Change: Initial support for IPv6
++
++uIP v0.5.7 (March 17, 2010)
++=======================================================
++
++   Enhancements
++   ------------
++
++   1. Change: Add to documentation on discovering on a particular
++	      iface before logging in
++
++uIP v0.5.6 (Mar 05, 2009)
++=======================================================
++   Fixes
++   -----
++   1. Problem: bnx2x panic dump would be seen when sending
++               traffic to uIP
++
++      Cause: The TX producer index was not properly
++             incrementing when the wrapping occured
++
++      Change: Do not skip the last TX producer index like the
++              TX BD's
++
++      Impact: None.
++
++uIP v0.5.5 (March 02, 2010)
++=======================================================
++   Initial release
++
++   Enhancements
++   ------------
++
++   1. Change: Add to documentation on debugging/logging for uIP
++
++
++uIP v0.5.4 (Feb 22, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Compile error where 'ETHERTYPE_VLAN' define
++               is missing
++
++      Cause: Certain distributions do not define 'ETHERTYPE_VLAN'
++             in the header file "net/ethernet.h".
++
++      Change: Added proper defines for ETHERTYPE_VLAN when necessary
++
++      Impact: None.
++
++
++uIP v0.5.3 (Feb 18, 2010)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Using VLAN's on offloaded iSCSI connections
++
++      Cause: (CQ45983) VLAN tags were not being properly inserted
++             when sending the ARP request packets
++
++      Change: Added VLAN tags when sending ARP request packets
++
++      Impact: None.
++
++
++uIP v0.5.2 (Dec 10, 2009)
++=======================================================
++   Fixes
++   -----
++   1. Problem: Switching between 10G and 1G iSCSI offloaded
++               devices caused login connectivity problems
++
++      Cause: The NIC devices within uIP were not cleanup
++             properly.
++
++      Change: The NIC structure is not re-initialized and the
++              NIC thread is destroyed when the host network
++              interface is brought down.
++
++      Impact: None.
++
++
++uIP v0.5.1 (Dec 9, 2009)
++=======================================================
++   Fixes
++   -----
++   1. Problem: 10G devices behind PCI bridges would not collect
++
++      Cause: PCI bus:slot.func string was parsed incorrectly
++             because the bridge string was used
++
++      Change: Parse the proper PCI bus:slot.func string.
++
++      Impact: None.
++
++
++uIP v0.5.0b (Nov 24, 2009)
++=======================================================
++   Initial release
++
++   Enhancements
++   ------------
++
++   1. Change: Add Broadcom 10G iSCSI offload support
++
++      Impact: Linux
++
+diff --git a/iscsiuio/configure.ac b/iscsiuio/configure.ac
+new file mode 100644
+index 0000000..4faee9e
+--- /dev/null
++++ b/iscsiuio/configure.ac
+@@ -0,0 +1,76 @@
++dnl iscsiuio uIP user space stack configure.ac file
++dnl
++dnl Copyright (c) 2004-2013 Broadcom Corporation
++dnl
++dnl This program is free software; you can redistribute it and/or modify
++dnl it under the terms of the GNU General Public License as published by
++dnl the Free Software Foundation.
++dnl
++dnl Written by: Eddie Wai (eddie.wai at broadcom.com)
++dnl             Benjamin Li  (benli at broadcom.com)
++dnl
++
++PACKAGE=iscsiuio
++VERSION=0.7.8.2
++
++AC_INIT([iscsiuio], [0.7.8.2], [eddie.wai at broadcom.com])
++
++AM_INIT_AUTOMAKE
++AC_CONFIG_HEADER(config.h)
++AC_PATH_PROGS(BASH, bash)
++
++AC_PROG_CC
++AM_PROG_CC_C_O
++
++AC_PROG_RANLIB
++
++AC_GNU_SOURCE
++AC_PROG_INSTALL
++AC_PROG_GCC_TRADITIONAL
++
++# Checks for typedefs, structures, and compiler characteristics.
++AC_C_CONST
++AC_C_INLINE
++AC_TYPE_OFF_T
++AC_TYPE_SIZE_T
++AC_CHECK_TYPES(int8_t)
++AC_CHECK_TYPES(uint8_t)
++AC_CHECK_TYPES(int16_t)
++AC_CHECK_TYPES(uint16_t)
++AC_CHECK_TYPES(int32_t)
++AC_CHECK_TYPES(uint32_t)
++AC_CHECK_TYPES(int64_t)
++AC_CHECK_TYPES(uint64_t)
++AC_CHECK_SIZEOF(short, 2)
++AC_CHECK_SIZEOF(int, 4)
++AC_CHECK_SIZEOF(long, 4)
++
++AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[BIG]),AC_SUBST([ENDIAN],[LITTLE]))
++
++AC_LIBTOOL_DLOPEN
++
++# libtool stuff
++AC_PROG_LIBTOOL
++
++CFLAGS="-O2 -Wall"
++## check for --enable-debug first before checking CFLAGS before
++## so that we don't mix -O and -g
++AC_ARG_ENABLE(debug,
++[  --enable-debug          Turn on compiler debugging information (default=no)],
++    [if eval "test x$enable_debug = xyes"; then
++        CFLAGS="${CFLAGS} -g -O0"
++    fi])
++AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
++
++AC_CONFIG_COMMANDS([default],[[ echo 'char *build_date = "'`date`'";' > src/unix/build_date.c  && echo 'char *build_date;'> src/unix/build_date.h]],[[]])
++
++AC_PREFIX_DEFAULT()
++
++AC_OUTPUT([Makefile
++src/Makefile
++src/apps/Makefile
++src/apps/dhcpc/Makefile
++src/apps/brcm-iscsi/Makefile
++src/uip/Makefile
++src/unix/Makefile
++src/unix/libs/Makefile])
+diff --git a/iscsiuio/docs/iscsiuio.8 b/iscsiuio/docs/iscsiuio.8
+new file mode 100644
+index 0000000..3b50409
+--- /dev/null
++++ b/iscsiuio/docs/iscsiuio.8
+@@ -0,0 +1,86 @@
++.\" Copyright (c) 2010-2013 Broadcom Corporation
++.\" This is free documentation; you can redistribute it and/or
++.\" modify it under the terms of the GNU General Public License as
++.\" published by the Free Software Foundation.
++.\"
++.\" bnx2.4,v 0.7.8.1b
++.\"
++.TH iscsiuio 8 "12/10/2013" "Broadcom Corporation"
++.\"
++.\" NAME part
++.\"
++.SH NAME
++iscsiuio \- iSCSI UserSpace I/O driver
++.\"
++.\" SYNOPSIS part
++.\"
++.SH SYNOPSIS
++.B iscsiuio
++.RB [ -d -f -v ]
++.PP
++.\"
++.\" DESCRIPTION part
++.\"
++.SH DESCRIPTION
++iscsiuio is the UserSpace I/O driver for the Broadcom NetXtreme II
++BCM5706/5708/5709 series PCI/PCI-X Gigabit Ethernet Network Interface Card
++(NIC) and for the Broadcom NetXtreme II BCM57710/57711/57712/57800/57810/57840
++series PCI-E 10 Gigabit Ethernet Network Interface Card.
++The driver has been tested on 2.6.28 kernels and above.
++.PP
++Refer to the README.TXT from the driver package on how to
++compile and install the driver.
++.PP
++Refer to various Linux documentations
++on how to configure network protocol and address.
++.\"
++.\" DRIVER DEPENDENCIES part
++.\"
++.SH DRIVER DEPENDENCIES
++
++.\"
++.\" PARAMETER part
++.\"
++.SH PARAMETERS
++There are very few parameters when running this application.
++.TP
++.BI -d <debug level>
++This is to enable debug mode where debug messages will be sent to stdout
++The following debug modes are supported
++.P
++.RS
++DEBUG         4 - Print all messages
++.P
++INFO          3 - Print messages needed to follow the uIP code (default)
++.P
++WARN          2 - Print warning messages
++.P
++ERROR         1 - Only print critical errors
++.RE
++.PP
++.TP
++.TP
++.BI -f
++This is to enable forground mode so that this application doesn't get sent
++into the background.
++.PP
++.TP
++.BI -v
++This is to print the version.
++.PP
++.TP
++.BI -p <pidfile>
++Use pidfile (default  /var/run/iscsiuio.pid )
++.PP
++.TP
++.BI -h
++Display this help and exit.
++
++
++.\"
++.\" AUTHOR part
++.\"
++.SH AUTHOR
++Benjamin Li \- benli at broadcom.com
++.P
++Eddie Wai \- eddie.wai at broadcom.com
+diff --git a/iscsiuio/iscsiuiolog b/iscsiuio/iscsiuiolog
+new file mode 100644
+index 0000000..360947c
+--- /dev/null
++++ b/iscsiuio/iscsiuiolog
+@@ -0,0 +1,10 @@
++/var/log/iscsiuio.log {
++    weekly
++    missingok
<Skipped 31627 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/open-iscsi.git/commitdiff/73d24d5e829ad5cd1b399f95fc288cb320b17a65




More information about the pld-cvs-commit mailing list