1.0.18+ bump

BuildRoot and ExcludeArch cleanup
This commit is contained in:
Petr Sabata 2011-04-20 11:03:37 +02:00
parent ee283d8643
commit 9a79b1c7b8
28 changed files with 1479 additions and 65 deletions

35
.gitignore vendored
View File

@ -1,2 +1,33 @@
fcoe-utils-1.0.14.tar.gz
/fcoe-utils-1.0.17.tar.gz
# standard autotools stuff
.deps/
Makefile
Makefile.in
aclocal.m4
autom4te.cache/
compile
config.log
config.status
configure
depcomp
install-sh
missing
# other autoconf generated files
fcoe-utils.spec
fcoeplumb
fcoe_utils_version.h
# compile generated files
*.o
fcoeadm
fcoemon
fipvlan
fcping
fcnsq
fcrls
etc/initd/fcoe
# build.sh generated files
fcoe-utils-*.tar.gz
fcoe-utils-*.rpm
/fcoe-utils-1.0.18.tar.bz2

View File

@ -1,11 +0,0 @@
--- fcoe-utils-1.0.12/Makefile.am.orig 2010-03-15 17:02:19.000000000 +0100
+++ fcoe-utils-1.0.12/Makefile.am 2010-03-15 17:02:34.000000000 +0100
@@ -62,8 +62,3 @@
init_d_SCRIPTS = etc/initd/fcoe
dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec etc/config
-
-install-data-hook:
- if [ ! -f ${DESTDIR}${fcoe_configdir}/config ] ; then \
- cp ${srcdir}/etc/config ${DESTDIR}${fcoe_configdir}/config; \
- fi

View File

@ -1,13 +0,0 @@
--- fcoe-utils-1.0.14/contrib/fcoe-setup.sh 2010-05-18 23:50:48.000000000 +0200
+++ fcoe-utils-1.0.14/contrib/fcoe-setup.sh.new 2010-11-30 17:24:07.839269545 +0100
@@ -24,9 +24,8 @@
vif=$(scan_vlan $ifname $vlan)
if [ -z "$vif" ] ; then
- vconfig set_name_type DEV_PLUS_VID_NO_PAD
- vconfig add $ifname $vlan > /dev/null
vif="$ifname.$vlan"
+ ip link add dev $vif link $ifname type vlan id $vlan
fi
ip link set $vif up
echo "$vif"

View File

@ -0,0 +1,118 @@
--- fcoe-utils-1.0.17/etc/initd/initd.fedora 2011-01-15 01:28:10.000000000 +0100
+++ fcoe-utils-1.0.17/etc/initd/initd.fedora.new 2011-02-04 10:54:50.152483041 +0100
@@ -15,7 +15,7 @@
# this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
#
-# chkconfig: - 21 80
+# chkconfig: 2345 21 80
#
# Maintained at www.Open-FCoE.org
@@ -23,7 +23,7 @@
# Provides: fcoe
# Required-Start: network
# Required-Stop:
-# Default-Start:
+# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Open-FCoE Initiator
# Description: Open-FCoE Initiator
--- fcoe-utils-1.0.17/etc/initd/initd.fedora 2011-02-04 11:06:42.251483139 +0100
+++ fcoe-utils-1.0.17/etc/initd/initd.fedora.new 2011-02-04 11:35:26.779482986 +0100
@@ -63,6 +63,16 @@
fi
}
+have_fcoe_root() {
+ # This simply checks if root is on a net device
+ local rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)
+ if [[ "$rootopts" =~ "_netdev" ]]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
start()
{
echo -n $"Starting FCoE initiator service: "
@@ -80,22 +90,27 @@
stop()
{
- local force=$1
-
- pid=$(pidof "$FCOEMON")
- if [ "$force" == "force" ]
- then
- action "Destroying any active fcoe interface/s"
- [ "$pid" ] && kill -HUP $pid
+ if have_fcoe_root; then
+ echo $"Possible FCoE root detected, not stopping FCoE."
+ exit 1
else
- [ "$pid" ] && kill -TERM $pid
- fi
+ local force=$1
- action $"Stopping FCoE initiator service: "
-
- rm -f /var/run/fcoemon.*
- rm -f /tmp/fcoemon.dcbd.*
- rm -f /var/lock/subsys/fcoe
+ pid=$(pidof "$FCOEMON")
+ if [ "$force" == "force" ]
+ then
+ action "Destroying any active fcoe interface/s"
+ [ "$pid" ] && kill -HUP $pid
+ else
+ [ "$pid" ] && kill -TERM $pid
+ fi
+
+ action $"Stopping FCoE initiator service: "
+
+ rm -f /var/run/fcoemon.*
+ rm -f /tmp/fcoemon.dcbd.*
+ rm -f /var/lock/subsys/fcoe
+ fi
}
status()
--- fcoe-utils-1.0.17/etc/initd/initd.fedora 2011-02-04 11:52:53.990483140 +0100
+++ fcoe-utils-1.0.17/etc/initd/initd.fedora.new 2011-02-04 12:46:03.401482934 +0100
@@ -85,6 +85,34 @@
echo
touch /var/lock/subsys/fcoe
+ # Wait for the _netdev devices
+ if [ "$WAIT_TIMEOUT" = "" ]; then
+ WAIT_TIMEOUT=65
+ fi
+ local donewait=1
+ local devs=($(egrep 'by-path\/fc-.*_netdev' /etc/fstab | cut -d ' ' -f1))
+ if [ "$devs" != "" ]; then
+ echo -n "Waiting for FCoE devices . "
+ while [ $WAIT_TIMEOUT -gt 0 ]; do
+ for disk in ${devs[*]}; do
+ if ! test -b $disk; then
+ donewait=0
+ break
+ fi
+ done
+ test $donewait -eq 1 && break;
+ sleep 1
+ echo -n ". "
+ donewait=1
+ WAIT_TIMEOUT=$(($WAIT_TIMEOUT-1))
+ done
+ if [ "$WAIT_TIMEOUT" -eq 0 ]; then
+ echo "timed out!"
+ else
+ echo "done!"
+ fi
+ fi
+
echo
}

View File

@ -0,0 +1,22 @@
--- fcoe-utils-1.0.17/Makefile.am 2011-01-15 01:28:10.000000000 +0100
+++ fcoe-utils-1.0.17/Makefile.am.new 2011-02-04 10:59:25.579483545 +0100
@@ -2,7 +2,7 @@
sbin_PROGRAMS = fcoeadm fcoemon fcping fipvlan fcnsq fcrls
## all targets should look for headers in the include directory
-AM_CPPFLAGS = -I${srcdir}/include -I${builddir}/include
+AM_CPPFLAGS = -I${srcdir}/include -I${builddir}/include -I/lib/modules/`rpm -q --list kernel | grep "^/lib/modules/.*/build$$" | cut -f4 -d"/" | sort -r | head -1`/build/include
## pass the sysconfdir into the C proprocessor
AM_CPPFLAGS += -DSYSCONFDIR="\"${sysconfdir}\""
AM_CFLAGS = -Wall
--- fcoe-utils-1.0.17/Makefile.am 2011-02-04 11:06:42.253483139 +0100
+++ fcoe-utils-1.0.17/Makefile.am.new 2011-02-04 11:06:59.956483271 +0100
@@ -65,8 +65,3 @@
init_d_SCRIPTS = etc/initd/fcoe
dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec etc/config
-
-install-data-hook:
- if [ ! -f ${DESTDIR}${fcoe_configdir}/config ] ; then \
- cp ${srcdir}/etc/config ${DESTDIR}${fcoe_configdir}/config; \
- fi

View File

@ -0,0 +1,59 @@
--- fcoe-utils-1.0.17/doc/fcoeadm.txt 2011-01-15 01:28:10.000000000 +0100
+++ fcoe-utils-1.0.17/doc/fcoeadm.txt.new 2011-02-04 11:46:24.217483236 +0100
@@ -25,6 +25,8 @@
*fcoeadm* -r|--reset _ethX_
+*fcoeadm* -S|--Scan _ethX_
+
*fcoeadm* -i|--interface [_ethX_]
*fcoeadm* -t|--target [_ethX_]
@@ -64,6 +66,9 @@
*-r*, *--reset* _ethX_::
Resets the FCoE instance on the specified network interface.
+*-S*, *--Scan* _ethX_::
+ Validates that the interface name has an active FCoE session.
+
*-i*, *--interface* [_ethX_]::
Show information about the FCoE instance on the specified network
interface, or all FCoE instances if no network interface is specified.
--- fcoe-utils-1.0.17/doc/fcoeadm.8 2011-01-15 01:28:10.000000000 +0100
+++ fcoe-utils-1.0.17/doc/fcoeadm.8.new 2011-02-04 11:50:48.400482913 +0100
@@ -2,12 +2,12 @@
.\" Title: fcoeadm
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\" Date: 04/29/2010
+.\" Date: 02/04/2011
.\" Manual: Open-FCoE Tools
.\" Source: Open-FCoE
.\" Language: English
.\"
-.TH "FCOEADM" "8" "04/29/2010" "Open\-FCoE" "Open\-FCoE Tools"
+.TH "FCOEADM" "8" "02/04/2011" "Open\-FCoE" "Open\-FCoE Tools"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
@@ -26,6 +26,8 @@
.sp
\fBfcoeadm\fR \-r|\-\-reset \fIethX\fR
.sp
+\fBfcoeadm\fR \-S|\-\-Scan \fIethX\fR
+.sp
\fBfcoeadm\fR \-i|\-\-interface [\fIethX\fR]
.sp
\fBfcoeadm\fR \-t|\-\-target [\fIethX\fR]
@@ -60,6 +62,11 @@
Resets the FCoE instance on the specified network interface\&.
.RE
.PP
+\fB\-S\fR, \fB\-\-Scan\fR \fIethX\fR
+.RS 4
+Validates that the interface name has an active FCoE session\&.
+.RE
+.PP
\fB\-i\fR, \fB\-\-interface\fR [\fIethX\fR]
.RS 4
Show information about the FCoE instance on the specified network interface, or all FCoE instances if no network interface is specified\&.

View File

@ -0,0 +1,14 @@
--- fcoe-utils-1.0.17/contrib/fcoe-setup.sh 2011-01-15 01:28:10.000000000 +0100
+++ fcoe-utils-1.0.17/contrib/fcoe-setup.sh.new 2011-02-04 12:52:13.873482656 +0100
@@ -24,9 +24,8 @@
vif=$(scan_vlan $ifname $vlan)
if [ -z "$vif" ] ; then
- vconfig set_name_type DEV_PLUS_VID_NO_PAD
- vconfig add $ifname $vlan > /dev/null
- vif="$ifname.$vlan"
+ vif="$ifname.$vlan"
+ ip link add dev $vif link $ifname type vlan id $vlan
fi
ip link set $vif up
echo "$vif"

View File

@ -0,0 +1,13 @@
diff --git a/etc/config b/etc/config
index c993f35..bfccf8c 100644
--- a/etc/config
+++ b/etc/config
@@ -12,3 +12,8 @@ USE_SYSLOG="yes"
## Default: list of default drivers
# All supported drivers listed here are loaded when service starts
SUPPORTED_DRIVERS="fcoe bnx2fc"
+
+## Type: integer
+## Default: 65
+# Wait at most for this amount of seconds to discover all _netdev fstab devices
+WAIT_TIMEOUT="65"

View File

@ -0,0 +1,76 @@
From fabcf9389e79c3535a58b5dc30632d444cb513f6 Mon Sep 17 00:00:00 2001
From: Nithin Sujir <nsujir@broadcom.com>
Date: Thu, 27 Jan 2011 04:12:08 +0000
Subject: [PATCH 02/16] fcoe-utils: Add SUPPORTED_DRIVERS field to config
SUPPORTED_DRIVERS is a space separated string field added to the config
file. The fcoe service will use this field instead of the previous
hardcoded "fcoe" to modprobe during startup.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
doc/fcoemon.txt | 5 +++--
etc/config | 4 ++++
etc/initd/initd.fedora | 2 +-
etc/initd/initd.suse | 2 +-
4 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/doc/fcoemon.txt b/doc/fcoemon.txt
index f42c8c0..117b2d0 100644
--- a/doc/fcoemon.txt
+++ b/doc/fcoemon.txt
@@ -159,8 +159,9 @@ default options in this file are: *DEBUG="no"* and *USE_SYSLOG="yes"*. The
former is used to enable debugging messages from the fcoe service script
and *fcoemon* (via the *--debug* option). The latter is to indicate if the
log messages are to be output to the system log (via the *--syslog*
-option). Any changes to this file will require a restart of the *fcoe*
-service.
+option). *SUPPORTED_DRIVERS* is the list of drivers to automatically load
+during fcoe service start. Any changes to this file will require a restart
+of the *fcoe* service.
/etc/fcoe/cfg-<ifname>
~~~~~~~~~~~~~~~~~~~~~~
diff --git a/etc/config b/etc/config
index 2d08c9e..c993f35 100644
--- a/etc/config
+++ b/etc/config
@@ -8,3 +8,7 @@ DEBUG="no"
# All the messages go to syslog and stderr (script & C code)
USE_SYSLOG="yes"
+## Type: string. Driver names separated by space
+## Default: list of default drivers
+# All supported drivers listed here are loaded when service starts
+SUPPORTED_DRIVERS="fcoe bnx2fc"
diff --git a/etc/initd/initd.fedora b/etc/initd/initd.fedora
index 3888dda..6a791cd 100755
--- a/etc/initd/initd.fedora
+++ b/etc/initd/initd.fedora
@@ -68,7 +68,7 @@ start()
echo -n $"Starting FCoE initiator service: "
modprobe -q libfc
- modprobe -q fcoe
+ modprobe -q -a $SUPPORTED_DRIVERS
daemon --pidfile ${PID_FILE} ${FCOEMON} ${FCOEMON_OPTS}
diff --git a/etc/initd/initd.suse b/etc/initd/initd.suse
index 139de2d..638eae5 100755
--- a/etc/initd/initd.suse
+++ b/etc/initd/initd.suse
@@ -82,7 +82,7 @@ test -x $FCOEMON || {
startup_fcoe_modules()
{
- modprobe fcoe > /dev/null 2>&1
+ modprobe -a $SUPPORTED_DRIVERS > /dev/null 2>&1
}
start()
--
1.7.4.4

View File

@ -0,0 +1,30 @@
From 12acb3a16b13e96b0ac604540aaf0148dffceb74 Mon Sep 17 00:00:00 2001
From: Ross Brattain <ross.b.brattain@intel.com>
Date: Wed, 13 Apr 2011 03:51:59 +0000
Subject: [PATCH 07/16] fcoe-utils: Add libnl build dependency for fcoe-utils
to QUICKSTART document.
fcoemon uses the header <netlink/netlink.h> from libnl.
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
QUICKSTART | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/QUICKSTART b/QUICKSTART
index 5183803..abe6cf2 100644
--- a/QUICKSTART
+++ b/QUICKSTART
@@ -176,6 +176,7 @@ PROCESS
DEPENDENCIES
+* libnl (see DCB section)
* libhbalinux
* lldpad v0.9.26 or greater (optional configure flag to build without)
--
1.7.4.4

View File

@ -0,0 +1,49 @@
From 8f4092733b9b3ba815597e67fc20c9e1897803e5 Mon Sep 17 00:00:00 2001
From: Petr Sabata <psabata@redhat.com>
Date: Fri, 1 Apr 2011 00:21:34 +0000
Subject: [PATCH 16/16] fcoe-utils: Avoid freeing uninitialized pointer in
fcoe_find_fchost()
Currently, running fcoeadm -i when SYSFS_FCHOST path isn't available results
in fcoeadm crash. This patch checks for this and frees namelist only if it's
been initialized.
Signed-off-by: Petr Sabata <psabata@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
lib/fcoe_utils.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/fcoe_utils.c b/lib/fcoe_utils.c
index 142b045..d54cd4d 100644
--- a/lib/fcoe_utils.c
+++ b/lib/fcoe_utils.c
@@ -67,11 +67,11 @@ static int fcoe_check_fchost(const char *ifname, const char *dname)
enum fcoe_status fcoe_find_fchost(char *ifname, char *fchost, int len)
{
- int n, dname_len;
+ int n, dname_len, status;
struct dirent **namelist;
int rc = ENOFCOECONN;
- n = scandir(SYSFS_FCHOST, &namelist, 0, alphasort);
+ status = n = scandir(SYSFS_FCHOST, &namelist, 0, alphasort);
for (n-- ; n >= 0 ; n--) {
if (rc) {
@@ -94,9 +94,9 @@ enum fcoe_status fcoe_find_fchost(char *ifname, char *fchost, int len)
}
}
free(namelist[n]);
-
}
- free(namelist);
+ if (status >= 0)
+ free(namelist);
return rc;
}
--
1.7.4.4

View File

@ -0,0 +1,54 @@
From 04943a7ed51fe27fb064990c6d1496c3267eedd3 Mon Sep 17 00:00:00 2001
From: Petr Sabata <psabata@redhat.com>
Date: Fri, 1 Apr 2011 00:06:11 +0000
Subject: [PATCH 13/16] fcoe-utils: Documentation for the fcoeadm -Scan option
and correct long option parsing
This patch adds a simple description for the fcoeadm -Scan along with the
long option fix.
Signed-off-by: Petr Sabata <psabata@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
doc/fcoeadm.txt | 5 +++++
fcoeadm.c | 1 +
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/doc/fcoeadm.txt b/doc/fcoeadm.txt
index 2b1cf0a..2552d4d 100644
--- a/doc/fcoeadm.txt
+++ b/doc/fcoeadm.txt
@@ -27,6 +27,8 @@ SYNOPSIS
*fcoeadm* -i|--interface [_ethX_]
+*fcoeadm* -S|--Scan [_ethX_]
+
*fcoeadm* -t|--target [_ethX_]
*fcoeadm* -l|--lun [_ethX_]
@@ -68,6 +70,9 @@ OPTIONS
Show information about the FCoE instance on the specified network
interface, or all FCoE instances if no network interface is specified.
+*-S*, *--Scan* _ethX_::
+ Validates that the interface name has an active FCoE session.
+
*-t*, *--target* [_ethX_]::
Show information about the discovered targets associated with the
FCoE instance on the specified network interface.
diff --git a/fcoeadm.c b/fcoeadm.c
index 0573d91..3cbff71 100644
--- a/fcoeadm.c
+++ b/fcoeadm.c
@@ -39,6 +39,7 @@ static struct option fcoeadm_opts[] = {
{"destroy", required_argument, 0, 'd'},
{"reset", required_argument, 0, 'r'},
{"interface", no_argument, 0, 'i'},
+ {"Scan", required_argument, 0, 'S'},
{"target", no_argument, 0, 't'},
{"lun", no_argument, 0, 'l'},
{"stats", no_argument, 0, 's'},
--
1.7.4.4

View File

@ -0,0 +1,71 @@
From d880216b9882eb601e60d2111a97ac1405f3529f Mon Sep 17 00:00:00 2001
From: Nithin Sujir <nsujir@broadcom.com>
Date: Tue, 12 Apr 2011 05:33:05 +0000
Subject: [PATCH 09/16] fcoe-utils: Drain fip socket during creation to
discard unintended rx packets.
During fcoe start, fcoemon creates a PF_PACKET,ETH_P_FIP raw socket for
vlan discovery. After the socket() call and before binding to the
desired device interface, the socket receives FIP packets from all
interfaces. This can interfere with VLAN discovery if a discovery packet
on one interface is received on the wrong socket. This patch drains the
socket after binding it to an interface and before adding the fd to
select monitoring.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
lib/fip.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/lib/fip.c b/lib/fip.c
index f8c8014..20c1082 100644
--- a/lib/fip.c
+++ b/lib/fip.c
@@ -136,6 +136,28 @@ static void fip_ethhdr(int ifindex, unsigned char *mac, struct ethhdr *eh)
}
/**
+ * drain_socket - Discard receive packets on a socket
+ */
+static void drain_socket(int s)
+{
+ char buf[4096];
+ struct sockaddr_ll sa;
+ struct iovec iov[] = {
+ { .iov_base = buf, .iov_len = sizeof(buf), },
+ };
+ struct msghdr msg = {
+ .msg_name = &sa,
+ .msg_namelen = sizeof(sa),
+ .msg_iov = iov,
+ .msg_iovlen = ARRAY_SIZE(iov),
+ };
+
+ while (recvmsg(s, &msg, MSG_DONTWAIT) > 0) {
+ /* Drop the packet */
+ }
+}
+
+/**
* fip_socket - create and bind a packet socket for FIP
*/
int fip_socket(int ifindex)
@@ -160,6 +182,13 @@ int fip_socket(int ifindex)
return rc;
}
+ /*
+ * Drain the packets that were received between socket and bind. We
+ * could've received packets not meant for our interface. This can
+ * interfere with vlan discovery
+ */
+ drain_socket(s);
+
return s;
}
--
1.7.4.4

View File

@ -0,0 +1,463 @@
From 48677372717fcbfcff17dbcd13441d9049f027e8 Mon Sep 17 00:00:00 2001
From: Parikh, Neerav <neerav.parikh@intel.com>
Date: Wed, 9 Mar 2011 08:16:46 +0000
Subject: [PATCH 03/16] fcoe-utils: Handle more than 128 adapters in fcoeadm
display commands
Currently fcoeadm only supports 128 adapters for display routines.
It does not handle scenario if there are more than 128 adapters
available on the system.
This patch removes that limitation and would allow display of more
than 128 adapters using fcoeadm display commands.
Signed-off-by: Neerav Parikh <Neerav.Parikh@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
fcoeadm_display.c | 211 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 136 insertions(+), 75 deletions(-)
diff --git a/fcoeadm_display.c b/fcoeadm_display.c
index 6b69148..8f95530 100644
--- a/fcoeadm_display.c
+++ b/fcoeadm_display.c
@@ -53,9 +53,6 @@
/* #define TEST_READ_CAP_V1 */
/* #define TEST_DEV_SERIAL_NO */
-/* Maximum number of HBA the display routines support */
-#define MAX_HBA_COUNT 128
-
/* Define FC4 Type */
#define FC_TYPE_FCP 0x08 /* SCSI FCP */
@@ -84,6 +81,14 @@ struct hba_name_table {
int displayed;
};
+/*
+ * List of HBA objects.
+ */
+struct hba_name_table_list {
+ int hba_count;
+ struct hba_name_table hba_table[1];
+};
+
struct sa_nameval port_states[] = {
{ "Not Present", HBA_PORTSTATE_UNKNOWN },
{ "Online", HBA_PORTSTATE_ONLINE },
@@ -1040,17 +1045,18 @@ show_port_stats_in_row(HBA_INT64 start_time,
printf("\n");
}
-static void hba_table_destroy(struct hba_name_table *hba_table)
+static void hba_table_list_destroy(struct hba_name_table_list *hba_table_list)
{
int i;
- /*
- * This is inefficiant as is closes adapter handles
- * (presumedly 0) that weren't open. However, it allows
- * us to avoid maintaining a count.
- */
- for (i = 0 ; i < MAX_HBA_COUNT ; i++)
- HBA_CloseAdapter(hba_table[i].hba_handle);
+ if (!hba_table_list)
+ return;
+
+ for (i = 0 ; i < hba_table_list->hba_count ; i++)
+ HBA_CloseAdapter(hba_table_list->hba_table[i].hba_handle);
+
+ free(hba_table_list);
+ hba_table_list = NULL;
}
static enum fcoe_status fcoeadm_loadhba()
@@ -1064,19 +1070,14 @@ static enum fcoe_status fcoeadm_loadhba()
/*
* This routine leaves all adapters fd's open.
*/
-static int hba_table_init(struct hba_name_table *hba_table)
+static int hba_table_list_init(struct hba_name_table_list **hba_table_list)
{
HBA_STATUS retval;
char namebuf[1024];
int i, num_hbas = 0;
-
- /*
- * Initialize the table.
- */
- for (i = 0 ; i < MAX_HBA_COUNT ; i++) {
- memset(&hba_table[i], 0,
- sizeof(struct hba_name_table));
- }
+ struct hba_name_table_list *hba_table_list_temp = NULL;
+ struct hba_name_table *hba_table = NULL;
+ int size = 0;
num_hbas = HBA_GetNumberOfAdapters();
if (!num_hbas) {
@@ -1084,6 +1085,18 @@ static int hba_table_init(struct hba_name_table *hba_table)
return num_hbas;
}
+ size = sizeof(struct hba_name_table_list) + \
+ (num_hbas - 1)*sizeof(struct hba_name_table);
+
+ hba_table_list_temp = (struct hba_name_table_list *)calloc(1, size);
+ if (!hba_table_list_temp) {
+ fprintf(stderr,
+ "Failure allocating memory.\n");
+ return -1;
+ }
+
+ hba_table_list_temp->hba_count = num_hbas;
+
/*
* Fill out the HBA table.
*/
@@ -1095,19 +1108,20 @@ static int hba_table_init(struct hba_name_table *hba_table)
continue;
}
- hba_table[i].hba_handle = HBA_OpenAdapter(namebuf);
- if (!hba_table[i].hba_handle) {
- hba_table[i].failed = 1;
+ hba_table = &hba_table_list_temp->hba_table[i];
+ hba_table->hba_handle = HBA_OpenAdapter(namebuf);
+ if (!hba_table->hba_handle) {
+ hba_table->failed = 1;
fprintf(stderr, "HBA_OpenAdapter failed\n");
perror("HBA_OpenAdapter");
continue;
}
- retval = HBA_GetAdapterAttributes(hba_table[i].hba_handle,
- &hba_table[i].hba_attrs);
+ retval = HBA_GetAdapterAttributes(hba_table->hba_handle,
+ &hba_table->hba_attrs);
if (retval != HBA_STATUS_OK) {
- HBA_CloseAdapter(hba_table[i].hba_handle);
- hba_table[i].failed = 1;
+ HBA_CloseAdapter(hba_table->hba_handle);
+ hba_table->failed = 1;
fprintf(stderr,
"HBA_GetAdapterAttributes failed, retval=%d\n",
retval);
@@ -1115,12 +1129,12 @@ static int hba_table_init(struct hba_name_table *hba_table)
continue;
}
- retval = HBA_GetAdapterPortAttributes(hba_table[i].hba_handle,
+ retval = HBA_GetAdapterPortAttributes(hba_table->hba_handle,
0,
- &hba_table[i].port_attrs);
+ &hba_table->port_attrs);
if (retval != HBA_STATUS_OK) {
- HBA_CloseAdapter(hba_table[i].hba_handle);
- hba_table[i].failed = 1;
+ HBA_CloseAdapter(hba_table->hba_handle);
+ hba_table->failed = 1;
fprintf(stderr,
"HBA_GetAdapterPortAttributes failed, "
"retval=%d\n", retval);
@@ -1128,20 +1142,26 @@ static int hba_table_init(struct hba_name_table *hba_table)
}
}
+ *hba_table_list = hba_table_list_temp;
+
return num_hbas;
}
/*
* This routine expects a valid interface name.
*/
-static int get_index_for_ifname(struct hba_name_table *hba_table,
- int num_hbas, const char *ifname)
+static int get_index_for_ifname(struct hba_name_table_list *hba_table_list,
+ const char *ifname)
{
+ HBA_PORTATTRIBUTES *port_attrs;
int i;
- for (i = 0 ; i < num_hbas ; i++) {
+ for (i = 0 ; i < hba_table_list->hba_count ; i++) {
+
+ port_attrs = &hba_table_list->hba_table[i].port_attrs;
+
if (!check_symbolic_name_for_interface(
- hba_table[i].port_attrs.PortSymbolicName,
+ port_attrs->PortSymbolicName,
ifname))
return i;
}
@@ -1157,28 +1177,35 @@ enum fcoe_status display_port_stats(const char *ifname, int interval)
HBA_PORTSTATISTICS port_stats;
HBA_FC4STATISTICS port_fc4stats;
HBA_INT64 start_time = 0;
- struct hba_name_table hba_table[MAX_HBA_COUNT];
+ struct hba_name_table_list *hba_table_list = NULL;
enum fcoe_status rc = SUCCESS;
int i, num_hbas;
if (fcoeadm_loadhba())
return EHBAAPIERR;
- num_hbas = hba_table_init(hba_table);
+ num_hbas = hba_table_list_init(&hba_table_list);
+ if (!num_hbas)
+ goto out;
+
+ if (num_hbas < 0) {
+ rc = EINTERR;
+ goto out;
+ }
- i = get_index_for_ifname(hba_table, num_hbas, ifname);
+ i = get_index_for_ifname(hba_table_list, ifname);
/*
* Return error code if a valid index wasn't returned.
*/
if (i < 0) {
- hba_table_destroy(hba_table);
+ hba_table_list_destroy(hba_table_list);
HBA_FreeLibrary();
return EHBAAPIERR;
}
- hba_handle = hba_table[i].hba_handle;
- port_attrs = &hba_table[i].port_attrs;
+ hba_handle = hba_table_list->hba_table[i].hba_handle;
+ port_attrs = &hba_table_list->hba_table[i].port_attrs;
i = 0;
while (1) {
@@ -1231,21 +1258,34 @@ enum fcoe_status display_port_stats(const char *ifname, int interval)
} while (secs_left);
}
- hba_table_destroy(hba_table);
+ hba_table_list_destroy(hba_table_list);
+out:
HBA_FreeLibrary();
return rc;
}
enum fcoe_status display_adapter_info(const char *ifname)
{
- struct hba_name_table hba_table[MAX_HBA_COUNT];
+ struct hba_name_table_list *hba_table_list = NULL;
enum fcoe_status rc = SUCCESS;
int i, j, num_hbas = 0;
+ HBA_HANDLE hba_handle;
+ HBA_PORTATTRIBUTES *port_attrs;
+ HBA_PORTATTRIBUTES *sport_attrs;
+ HBA_ADAPTERATTRIBUTES *hba_attrs;
+ HBA_ADAPTERATTRIBUTES *shba_attrs;
if (fcoeadm_loadhba())
return EHBAAPIERR;
- num_hbas = hba_table_init(hba_table);
+ num_hbas = hba_table_list_init(&hba_table_list);
+ if (!num_hbas)
+ goto out;
+
+ if (num_hbas < 0) {
+ rc = EINTERR;
+ goto out;
+ }
/*
* Loop through each HBA entry and for each serial number
@@ -1253,52 +1293,59 @@ enum fcoe_status display_adapter_info(const char *ifname)
* on that adapter.
*/
for (i = 0 ; i < num_hbas ; i++) {
- if (hba_table[i].failed ||
- hba_table[i].displayed)
+ if (hba_table_list->hba_table[i].failed ||
+ hba_table_list->hba_table[i].displayed)
continue;
+ hba_handle = hba_table_list->hba_table[i].hba_handle;
+ port_attrs = &hba_table_list->hba_table[i].port_attrs;
+ hba_attrs = &hba_table_list->hba_table[i].hba_attrs;
+
if (ifname && check_symbolic_name_for_interface(
- hba_table[i].port_attrs.PortSymbolicName,
+ port_attrs->PortSymbolicName,
ifname)) {
/*
* Overloading 'displayed' to indicate
* that the HBA/Port should be skipped.
*/
- hba_table[i].displayed = 1;
+ hba_table_list->hba_table[i].displayed = 1;
continue;
}
/*
* Display the adapter header.
*/
- show_hba_info(&hba_table[i].hba_attrs);
+ show_hba_info(hba_attrs);
/*
* Loop through HBAs again to print sub-ports.
*/
for (j = 0; j < num_hbas ; j++) {
+ sport_attrs = &hba_table_list->hba_table[j].port_attrs;
+ shba_attrs = &hba_table_list->hba_table[j].hba_attrs;
if (ifname && check_symbolic_name_for_interface(
- hba_table[j].port_attrs.PortSymbolicName,
+ sport_attrs->PortSymbolicName,
ifname)) {
/*
* Overloading 'displayed' to indicate
* that the HBA/Port should be skipped.
*/
- hba_table[i].displayed = 1;
+ hba_table_list->hba_table[i].displayed = 1;
continue;
}
- if (!strncmp(hba_table[i].hba_attrs.SerialNumber,
- hba_table[j].hba_attrs.SerialNumber,
- strlen(hba_table[i].hba_attrs.SerialNumber))) {
- show_port_info(&hba_table[j].hba_attrs,
- &hba_table[j].port_attrs);
- hba_table[j].displayed = 1;
+ if (!strncmp(hba_attrs->SerialNumber,
+ shba_attrs->SerialNumber,
+ strlen(hba_attrs->SerialNumber))) {
+ show_port_info(shba_attrs,
+ sport_attrs);
+ hba_table_list->hba_table[j].displayed = 1;
}
}
}
- hba_table_destroy(hba_table);
+ hba_table_list_destroy(hba_table_list);
+out:
HBA_FreeLibrary();
return rc;
@@ -1309,14 +1356,24 @@ enum fcoe_status display_target_info(const char *ifname,
{
HBA_STATUS retval;
HBA_PORTATTRIBUTES rport_attrs;
- struct hba_name_table hba_table[MAX_HBA_COUNT];
+ struct hba_name_table_list *hba_table_list = NULL;
int i, target_index, num_hbas = 0;
enum fcoe_status rc = SUCCESS;
+ HBA_HANDLE hba_handle;
+ HBA_PORTATTRIBUTES *port_attrs;
+ HBA_ADAPTERATTRIBUTES *hba_attrs;
if (fcoeadm_loadhba())
return EHBAAPIERR;
- num_hbas = hba_table_init(hba_table);
+ num_hbas = hba_table_list_init(&hba_table_list);
+ if (!num_hbas)
+ goto out;
+
+ if (num_hbas < 0) {
+ rc = EINTERR;
+ goto out;
+ }
/*
* Loop through each HBA entry and for each serial number
@@ -1324,28 +1381,32 @@ enum fcoe_status display_target_info(const char *ifname,
* on that adapter.
*/
for (i = 0 ; i < num_hbas ; i++) {
- if (hba_table[i].failed ||
- hba_table[i].displayed)
+ if (hba_table_list->hba_table[i].failed ||
+ hba_table_list->hba_table[i].displayed)
continue;
+ hba_handle = hba_table_list->hba_table[i].hba_handle;
+ port_attrs = &hba_table_list->hba_table[i].port_attrs;
+ hba_attrs = &hba_table_list->hba_table[i].hba_attrs;
+
if (ifname && check_symbolic_name_for_interface(
- hba_table[i].port_attrs.PortSymbolicName,
+ port_attrs->PortSymbolicName,
ifname)) {
/*
* Overloading 'displayed' to indicate
* that the HBA/Port should be skipped.
*/
- hba_table[i].displayed = 1;
+ hba_table_list->hba_table[i].displayed = 1;
continue;
}
for (target_index = 0;
- target_index < hba_table[i].port_attrs.NumberofDiscoveredPorts;
+ target_index < port_attrs->NumberofDiscoveredPorts;
target_index++) {
/* TODO: Second arg might be incorrect */
retval = HBA_GetDiscoveredPortAttributes(
- hba_table[i].hba_handle,
+ hba_handle,
0, target_index,
&rport_attrs);
@@ -1354,7 +1415,7 @@ enum fcoe_status display_target_info(const char *ifname,
"HBA_GetDiscoveredPortAttributes "
"failed for target_index=%d, "
"status=%d\n", target_index, retval);
- hba_table[i].failed = 1;
+ hba_table_list->hba_table[i].failed = 1;
continue;
}
@@ -1365,26 +1426,26 @@ enum fcoe_status display_target_info(const char *ifname,
continue;
show_target_info(
- hba_table[i].port_attrs.PortSymbolicName,
- &hba_table[i].hba_attrs,
+ port_attrs->PortSymbolicName,
+ hba_attrs,
&rport_attrs);
- if (hba_table[i].port_attrs.PortState !=
- HBA_PORTSTATE_ONLINE)
+ if (port_attrs->PortState != HBA_PORTSTATE_ONLINE)
continue;
/*
* This will print the LUN table
* under the target.
*/
- scan_device_map(hba_table[i].hba_handle,
- &hba_table[i].hba_attrs,
- &hba_table[i].port_attrs,
+ scan_device_map(hba_handle,
+ hba_attrs,
+ port_attrs,
&rport_attrs, ifname, style);
}
}
- hba_table_destroy(hba_table);
+ hba_table_list_destroy(hba_table_list);
+out:
HBA_FreeLibrary();
return rc;
--
1.7.4.4

View File

@ -0,0 +1,29 @@
From 6394a804ef09b83b78348c189dc4b99b440e0f6b Mon Sep 17 00:00:00 2001
From: Petr Sabata <psabata@redhat.com>
Date: Thu, 24 Mar 2011 00:39:30 +0000
Subject: [PATCH 06/16] fcoe-utils: Include current lldpad headers
Include current header files provided by open-lldp.
Signed-off-by: Petr Sabata <psabata@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fcoemon.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 9df473a..74795e4 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -46,7 +46,7 @@
#include <lldpad/dcb_types.h>
#include <lldpad/clif.h>
-#include <lldpad/clif_cmds.h>
+#include <lldpad/lldp_dcbx_cmds.h>
#include "fcoe_utils_version.h"
#include "fcoemon_utils.h"
--
1.7.4.4

View File

@ -0,0 +1,39 @@
From 5aaaef140bf87138bca14a088a83a70b19fe4f23 Mon Sep 17 00:00:00 2001
From: Petr Sabata <psabata@redhat.com>
Date: Tue, 12 Apr 2011 15:38:04 +0000
Subject: [PATCH 10/16] fcoe-utils: Include fcoe_utils.h before scsi/scsi.h
The scsi/scsi.h header file defines 'SUCCESS' as 0x2002 which couses the
'SUCCESS' identifier in fcoe_status to get expanded, resulting in fcping
build failure. This patch prevents it by including fcoe_utils.h first.
Signed-off-by: Petr Sabata <psabata@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fcping.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/fcping.c b/fcping.c
index 76ce7e2..a68883d 100644
--- a/fcping.c
+++ b/fcping.c
@@ -47,6 +47,7 @@
#include <linux/bsg.h>
#include "net_types.h"
#include "fc_types.h"
+#include "fcoe_utils.h"
typedef uint8_t u8;
#include <scsi/sg.h>
#include <scsi/fc/fc_ns.h>
@@ -54,8 +55,6 @@ typedef uint8_t u8;
#include <scsi/fc/fc_els.h>
#include <scsi/scsi_bsg_fc.h>
-#include "fcoe_utils.h"
-
static const char *cmdname;
#define FC_MAX_PAYLOAD (2112UL - sizeof(net32_t))
--
1.7.4.4

View File

@ -0,0 +1,27 @@
From b8d63420e5c33391ff4ba300df862f599cd2a76b Mon Sep 17 00:00:00 2001
From: Nithin Sujir <nsujir@broadcom.com>
Date: Tue, 12 Apr 2011 05:33:06 +0000
Subject: [PATCH 11/16] fcoe-utils: Remove unused variable symbolic_name_len
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
lib/fcoe_utils.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/lib/fcoe_utils.c b/lib/fcoe_utils.c
index 0ebdf9b..142b045 100644
--- a/lib/fcoe_utils.c
+++ b/lib/fcoe_utils.c
@@ -161,7 +161,6 @@ int fcoe_checkdir(char *dir)
*/
char *get_ifname_from_symbolic_name(const char *symbolic_name)
{
- int symbolic_name_len = strlen(symbolic_name);
char *last_space = strrchr(symbolic_name, ' ');
if (!last_space || strlen(last_space) == 1)
--
1.7.4.4

View File

@ -0,0 +1,33 @@
From 5300772f83c8f3eeb1dbb972d36b4112ec01a51f Mon Sep 17 00:00:00 2001
From: Petr Sabata <psabata@redhat.com>
Date: Fri, 1 Apr 2011 00:00:28 +0000
Subject: [PATCH 12/16] fcoe-utils: Use iproute2 instead of deprecated vconfig
vconfig has been considered generally deprecated in favor of iproute2 for
some time now. This patch utilizes `ip link' and removes vconfig dependency.
Signed-off-by: Petr Sabata <psabata@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
contrib/fcoe-setup.sh | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/contrib/fcoe-setup.sh b/contrib/fcoe-setup.sh
index ab23400..2142c42 100755
--- a/contrib/fcoe-setup.sh
+++ b/contrib/fcoe-setup.sh
@@ -24,9 +24,8 @@ create_vlan () {
vif=$(scan_vlan $ifname $vlan)
if [ -z "$vif" ] ; then
- vconfig set_name_type DEV_PLUS_VID_NO_PAD
- vconfig add $ifname $vlan > /dev/null
- vif="$ifname.$vlan"
+ vif="$ifname.$vlan"
+ ip link add dev $vif link $ifname type vlan id $vlan
fi
ip link set $vif up
echo "$vif"
--
1.7.4.4

View File

@ -0,0 +1,32 @@
From 1511aba0a6586ccd285c0c326f6f9c1a266c6a10 Mon Sep 17 00:00:00 2001
From: Mark Rustad <mark.d.rustad@intel.com>
Date: Fri, 8 Apr 2011 00:30:04 +0000
Subject: [PATCH 14/16] fcoemon: Correct wrong error check.
Correct wrong error check on return value from a socket() call. 0 is a
valid return, and treating it as an error could result in trouble.
Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
fcoemon.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 77b3fd5..5449ae6 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -607,7 +607,7 @@ static void fcm_vlan_dev_real_dev(char *vlan_ifname, char *real_ifname)
fd = socket(PF_INET, SOCK_DGRAM, 0);
- if (fd <= 0) {
+ if (fd < 0) {
FCM_LOG_ERR(errno, "open vlan query socket error");
return;
}
--
1.7.4.4

View File

@ -0,0 +1,42 @@
From adbae9962146896a90546ef2cd61abc938c7c2f7 Mon Sep 17 00:00:00 2001
From: Mark Rustad <mark.d.rustad@intel.com>
Date: Fri, 8 Apr 2011 00:24:04 +0000
Subject: [PATCH 15/16] fcoemon: Fix 2 file descriptor leaks
Fix 2 file descriptor leaks, one of which can occur repeatedly.
Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
fcoemon.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 5449ae6..f2f3b86 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -472,6 +472,7 @@ static int fcm_link_init(void)
rc = bind(fd, (struct sockaddr *)&l_local, sizeof(l_local));
if (rc == -1) {
FCM_LOG_ERR(errno, "bind error");
+ close(fd);
return rc;
}
fcm_link_socket = fd;
@@ -1255,8 +1256,10 @@ static void fcm_dcbd_retry_timeout(void *arg)
static void fcm_dcbd_disconnect(void)
{
if (fcm_clif != NULL && fcm_clif->cl_local.sun_path[0] != '\0') {
- if (fcm_clif->cl_fd >= 0)
+ if (fcm_clif->cl_fd >= 0) {
sa_select_rem_fd(fcm_clif->cl_fd);
+ close(fcm_clif->cl_fd);
+ }
unlink(fcm_clif->cl_local.sun_path);
fcm_clif->cl_local.sun_path[0] = '\0';
fcm_clif->cl_fd = -1; /* mark as disconnected */
--
1.7.4.4

View File

@ -0,0 +1,39 @@
From 16b009e33b6fecab11a856428ada98288724fcbb Mon Sep 17 00:00:00 2001
From: Nithin Sujir <nsujir@broadcom.com>
Date: Wed, 30 Mar 2011 08:56:59 +0000
Subject: [PATCH 08/16] fcoemon: Unexpected FLOGI after fcoe port is destroyed
When fcoeadm -d is performed, fcoemon sets fcoe_enable=0 on the
physical port being destroyed but not on the vlan port. If a link toggle
occurs at this time, two link events are received, one each for physical
and vlan interfaces. The physical interface event is ignored due to
fcoe_enable=0 but the vlan event is processed and CREATE is called
resulting in unexpected FLOGI. This also puts the physical and vlan
ports out of sync and a subsequent fcoeadm -d is not processed.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
fcoemon.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 74795e4..77b3fd5 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -2049,8 +2049,10 @@ static void fcm_fcoe_action(struct fcm_netif *ff, struct fcoe_port *p)
/* destroy all the VLANs */
vp = fcm_find_fcoe_port(p->ifname, FCP_REAL_IFNAME);
while (vp) {
- if (vp->auto_created)
+ if (vp->auto_created) {
+ vp->fcoe_enable = 0;
fcp_set_next_action(vp, FCP_DESTROY_IF);
+ }
vp = fcm_find_next_fcoe_port(vp, p->ifname);
}
rc = SUCCESS;
--
1.7.4.4

View File

@ -0,0 +1,33 @@
From dbe527951f6f0836ba8d31ad77d09e8870dfb987 Mon Sep 17 00:00:00 2001
From: Robert Love <robert.w.love@intel.com>
Date: Tue, 25 Jan 2011 04:43:48 +0000
Subject: [PATCH 01/16] fcoemon: Use new libfcoe.ko interfaces (create,
destroy, ...)
The create, destroy, enable and disable interfaces have
all moved from fcoe.ko to libfcoe.ko with the kernel
fcoe transport changes. fcoemon needs to use the new kernel
interfaces since the old ones do not exist anymore.
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
include/fcoe_utils.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/fcoe_utils.h b/include/fcoe_utils.h
index 48019b5..46085be 100644
--- a/include/fcoe_utils.h
+++ b/include/fcoe_utils.h
@@ -38,7 +38,7 @@
#define SYSFS_MOUNT "/sys"
#define SYSFS_NET SYSFS_MOUNT "/class/net"
#define SYSFS_FCHOST SYSFS_MOUNT "/class/fc_host"
-#define SYSFS_FCOE SYSFS_MOUNT "/module/fcoe/parameters"
+#define SYSFS_FCOE SYSFS_MOUNT "/module/libfcoe/parameters"
#define FCHOSTBUFLEN 64
--
1.7.4.4

View File

@ -0,0 +1,78 @@
From c76c44392b52e58cab9212eb94c19f59835240c7 Mon Sep 17 00:00:00 2001
From: Nithin Sujir <nsujir@broadcom.com>
Date: Wed, 23 Mar 2011 01:38:25 +0000
Subject: [PATCH 04/16] fcoeutils: Cancel vlan discovery timer only when valid
response is received
Currently fcoemon cancels the timer as soon as a response is received
whether all the critical descriptors are present or not. This patch
verifies the critical descriptors are present in the vlan response
before cancelling the timer.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
fcoemon.c | 20 ++++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index cd0916b..042d1c8 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -517,6 +517,12 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg)
struct fip_tlv_hdr *tlv = (struct fip_tlv_hdr *)(fh + 1);
struct fcoe_port *p = arg;
struct fcoe_port *vp;
+ int desc_mask = 0;
+
+ enum {
+ VALID_MAC = 1,
+ VALID_VLAN = 2,
+ };
if (ntohs(fh->fip_proto) != FIP_PROTO_VLAN)
return -1;
@@ -524,14 +530,12 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg)
if (fh->fip_subcode != FIP_VLAN_NOTE)
return -1;
- /* cancel the retry timer, response received */
- sa_timer_cancel(&p->vlan_disc_timer);
-
while (len > 0) {
switch (tlv->tlv_type) {
case FIP_TLV_MAC_ADDR:
memcpy(mac, ((struct fip_tlv_mac_addr *)tlv)->mac_addr,
ETHER_ADDR_LEN);
+ desc_mask |= VALID_MAC;
break;
/*
* this expects to see the MAC_ADDR TLV first,
@@ -545,6 +549,7 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg)
vid = ntohs(((struct fip_tlv_vlan *)tlv)->vlan);
vp = fcm_new_vlan(sa->sll_ifindex, vid);
vp->dcb_required = p->dcb_required;
+ desc_mask |= VALID_VLAN;
break;
default:
/* unexpected or unrecognized descriptor */
@@ -554,7 +559,14 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg)
len -= tlv->tlv_len;
tlv = ((void *) tlv) + (tlv->tlv_len << 2);
};
- return 0;
+
+ if (desc_mask == (VALID_MAC | VALID_VLAN)) {
+ /* cancel the retry timer, valid response received */
+ sa_timer_cancel(&p->vlan_disc_timer);
+ return 0;
+ } else {
+ return -1;
+ }
}
static void fcm_fip_recv(void *arg)
--
1.7.4.4

View File

@ -0,0 +1,40 @@
From b4e06e408639fa29e3fac5a2235b46a4e1b4a3a0 Mon Sep 17 00:00:00 2001
From: Nithin Sujir <nsujir@broadcom.com>
Date: Wed, 23 Mar 2011 09:36:08 +0000
Subject: [PATCH 05/16] fcoeutils: Retry vlan discovery forever if AUTO_VLAN
and FCOE_ENABLE are set
This is a modified patch as per Robert Love's comments -
https://lists.open-fcoe.org/pipermail/devel/2011-March/011272.html
After trying vlan discovery 10 times fcoemon disables auto_vlan on the
port and falls back to the physical interface. bnx2fc does not support
this. This patch checks for FCOE_ENABLE and AUTO_VLAN and if both are
set for the interface, the vlan discovery will continue until a vlan is
discovered.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
fcoemon.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 042d1c8..9df473a 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -1994,7 +1994,9 @@ void fcm_vlan_disc_timeout(void *arg)
struct fcoe_port *p = arg;
FCM_LOG_DBG("%s: VLAN discovery TIMEOUT [%d]",
p->ifname, p->vlan_disc_count);
- if (++(p->vlan_disc_count) > FCM_VLAN_DISC_MAX) {
+ p->vlan_disc_count++;
+ if (!(p->fcoe_enable && p->auto_vlan) &&
+ (p->vlan_disc_count > FCM_VLAN_DISC_MAX)) {
FCM_LOG("%s: VLAN discovery failed after %d attempts",
p->ifname, FCM_VLAN_DISC_MAX);
FCM_LOG("%s: disabling VLAN discovery, trying FCoE on %s",
--
1.7.4.4

View File

@ -0,0 +1,13 @@
diff --git a/fcnsq.c b/fcnsq.c
index 8722b21..466a85e 100644
--- a/fcnsq.c
+++ b/fcnsq.c
@@ -360,7 +360,7 @@ static void help(int status)
" --gspn <port id>\n"
" --gsnn <world wide node name>\n"
"Options:\n"
- " --quiet print minimal results on success, and no error messages\n"
+ " --quiet|-q print minimal results on success, and no error messages\n"
"\n"
"Port IDs and World Wide Names must be specified in hexadecimal.\n"
);

View File

@ -1,25 +1,40 @@
Name: fcoe-utils
Version: 1.0.17
Release: 1.1%{?dist}
Version: 1.0.18
Release: 1%{?dist}
Summary: Fibre Channel over Ethernet utilities
Group: Applications/System
License: GPLv2
URL: http://www.open-fcoe.org
# This source was pulled from upstream git repository
# To make a tarball, just run:
# git clone git://open-fcoe.org/fcoe/fcoe-utils.git && cd fcoe-utils
# git archive --prefix=fcoe-utils-%{version}/ v%{version} > ../fcoe-utils-%{version}.tar
# cd .. && gzip fcoe-utils-%{version}
Source0: %{name}-%{version}.tar.gz
# git://open-fcoe.org/fcoe/fcoe-utils.git
Source0: %{name}-%{version}.tar.bz2
Source1: quickstart.txt
Patch0: fcoe-utils-1.0.12-makefile-data-hook.patch
Patch1: fcoe-utils-1.0.14-no-vconfig.patch
Patch2: fcoe-include-headers.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
ExcludeArch: s390
# Generic Fedora patches
Patch0: fcoe-utils-1.0.17-init.patch
Patch1: fcoe-utils-1.0.17-make.patch
Patch2: fcoe-utils-1.0.18-help.patch
#Patch3: fcoe-utils-1.0.17-manpages.patch
Patch4: fcoe-utils-1.0.18-config.patch
Patch5: fcoe-utils-1.0.18-kernel-headers.patch
# Upstream patches
Patch10: fcoe-utils-1.0.18-fcoemon-Use-new-libfcoe.ko-interfaces-create-destroy.patch
Patch11: fcoe-utils-1.0.18-fcoe-utils-Add-SUPPORTED_DRIVERS-field-to-config.patch
Patch12: fcoe-utils-1.0.18-fcoe-utils-Handle-more-than-128-adapters-in-fcoeadm-.patch
Patch13: fcoe-utils-1.0.18-fcoeutils-Cancel-vlan-discovery-timer-only-when-vali.patch
Patch14: fcoe-utils-1.0.18-fcoeutils-Retry-vlan-discovery-forever-if-AUTO_VLAN-.patch
Patch15: fcoe-utils-1.0.18-fcoe-utils-Include-current-lldpad-headers.patch
Patch16: fcoe-utils-1.0.18-fcoe-utils-Add-libnl-build-dependency-for-fcoe-utils.patch
Patch17: fcoe-utils-1.0.18-fcoemon-Unexpected-FLOGI-after-fcoe-port-is-destroye.patch
Patch18: fcoe-utils-1.0.18-fcoe-utils-Drain-fip-socket-during-creation-to-disca.patch
Patch19: fcoe-utils-1.0.18-fcoe-utils-Include-fcoe_utils.h-before-scsi-scsi.h.patch
Patch20: fcoe-utils-1.0.18-fcoe-utils-Remove-unused-variable-symbolic_name_len.patch
Patch21: fcoe-utils-1.0.18-fcoe-utils-Use-iproute2-instead-of-deprecated-vconfi.patch
Patch22: fcoe-utils-1.0.18-fcoe-utils-Documentation-for-the-fcoeadm-Scan-option.patch
Patch23: fcoe-utils-1.0.18-fcoemon-Correct-wrong-error-check.patch
Patch24: fcoe-utils-1.0.18-fcoemon-Fix-2-file-descriptor-leaks.patch
Patch25: fcoe-utils-1.0.18-fcoe-utils-Avoid-freeing-uninitialized-pointer-in-fc.patch
BuildRequires: libhbaapi-devel lldpad-devel
BuildRequires: libhbaapi-devel lldpad-devel libnl-devel
BuildRequires: libtool automake autoconf
Requires: lldpad libhbalinux >= 1.0.9 iproute device-mapper-multipath
Requires(post): chkconfig
@ -32,38 +47,51 @@ fcoeadm - command line tool for configuring FCoE interfaces
fcoemon - service to configure DCB Ethernet QOS filters, works with dcbd or lldpad
%prep
%setup -q
%patch0 -p1 -b .data-hook
%patch1 -p1 -b .no-vconfig
%patch2 -p1 -b .headers
%setup -q -c -n %{name}-%{version}
# Upstream first
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
# Fedora patches on top of that...
%patch0 -p1 -b .init
%patch1 -p1 -b .make
%patch2 -p1 -b .help
#%patch3 -p1 -b .manpages
%patch4 -p1 -b .config
%patch5 -p1 -F 2 -b .kernel-headers
%build
./bootstrap.sh
%configure
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_initrddir}
mv $RPM_BUILD_ROOT/etc/init.d/fcoe $RPM_BUILD_ROOT%{_initrddir}/fcoe
rm -rf $RPM_BUILD_ROOT/etc/init.d
make install DESTDIR=%{buildroot}
mkdir -p %{buildroot}%{_initrddir}
mv %{buildroot}/etc/init.d/fcoe %{buildroot}%{_initrddir}/fcoe
rm -rf %{buildroot}/etc/init.d
install -m 644 %SOURCE1 quickstart.txt
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/fcoe/
cp etc/config $RPM_BUILD_ROOT%{_sysconfdir}/fcoe/config
mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/fcoe
install -m 755 contrib/fcc.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcc.sh
install -m 755 contrib/fcoe_edd.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoe_edd.sh
install -m 755 contrib/fcoe-setup.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoe-setup.sh
install -m 755 debug/fcoedump.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoedump.sh
install -m 755 debug/dcbcheck.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/dcbcheck.sh
%clean
rm -rf $RPM_BUILD_ROOT
mkdir -p %{buildroot}%{_sysconfdir}/fcoe/
cp etc/config %{buildroot}%{_sysconfdir}/fcoe/config
mkdir -p %{buildroot}%{_libexecdir}/fcoe
install -m 755 contrib/fcc.sh %{buildroot}%{_libexecdir}/fcoe/fcc.sh
install -m 755 contrib/fcoe_edd.sh %{buildroot}%{_libexecdir}/fcoe/fcoe_edd.sh
install -m 755 contrib/fcoe-setup.sh %{buildroot}%{_libexecdir}/fcoe/fcoe-setup.sh
install -m 755 debug/fcoedump.sh %{buildroot}%{_libexecdir}/fcoe/fcoedump.sh
install -m 755 debug/dcbcheck.sh %{buildroot}%{_libexecdir}/fcoe/dcbcheck.sh
%post
/sbin/chkconfig --add fcoe
@ -110,6 +138,11 @@ fi
%changelog
* Wed Apr 20 2011 Petr Sabata <psabata@redhat.com> - 1.0.18-1
- 1.0.18 bump with latest bugfixes
- Removing ExcludeArch completely; not related for Fedora
- Buildroot cleanup
* Tue Apr 19 2011 Karsten Hopp <karsten@redhat.com> 1.0.17-1.1
- remove excludearch ppc, required by anaconda.ppc

View File

@ -1 +1 @@
18fc04e7bda993f8297f1106a44edb2b fcoe-utils-1.0.17.tar.gz
a6b3bb359aa59e0ec7eac2764aec5ba7 fcoe-utils-1.0.18.tar.bz2