- Update to version 1.0.30 (FATE#318849)

* Remove merged patches:
    + 0001-man-Fix-small-typo-regarding-fcf-option.patch
    + 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch
    + 0003-fipvlan-fails-on-powerpc.patch
    + 0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch
    + 0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch
    + 0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch
    + 0007-fipvlan-create-VLANs-from-netlink-handler.patch
    + 0008-fipvlan-Start-FCoE-from-netlink-handler.patch
    + 0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch
    + 0010-fipvlan-Re-send-VLAN-discovery.patch
    + 0011-fipvlan-update-manpage.patch
    + 0012-fipvlan-Leave-link-up-if-requested.patch
    + 0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch
    + 0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch
    + 0015-fipvlan-break-out-of-receive-loop-on-error.patch
    + 0016-fipvlan-handle-errors-from-fip-socket-creation.patch
    + 0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch
    + 0018-Add-missing-DESTDIR-when-installing-bash-completion.patch
    + 0019-Fix-build-with-Wl-as-needed.patch
    + 0020-Fix-integer-formatting.patch
    + 0021-fcnsq-Fixup-help-text.patch
    + 0022-fcnsq-Fixup-64bit-integer-handling.patch
    + 0023-fcoemon-add-systemd-service-file.patch
    + 0024-fcoemon-systemd-socket-activation.patch
    + 0025-doc-Update-QUICKSTART-INSTALL-docs-for-systemd-init-.patch
    + 0026-FIPVLAN-Really-break-out-of-the-recv_loop-upon-fip_r.patch
    + 0027-man-Fix-typo-in-fcoemon-documentation.patch
    + 0032-fipvlan-Fix-crash-in-create_and_start_vlan.patch

OBS-URL: https://build.opensuse.org/package/show/network:fcoe/fcoe-utils?expand=0&rev=22
This commit is contained in:
Hannes Reinecke 2015-08-04 10:18:41 +00:00 committed by Git OBS Bridge
parent 636b4bf7b0
commit 5ac0391a2f
43 changed files with 244 additions and 2366 deletions

View File

@ -0,0 +1,78 @@
From f3af6bad75d7f6c90b9a170cbf9e4748ab4bb24e Mon Sep 17 00:00:00 2001
From: Johannes Thumshirn <jthumshirn@suse.de>
Date: Mon, 18 May 2015 17:02:59 +0000
Subject: fcoemon: Rework daemonizing and error handling
Rework error handling, which leads to daemonizing later in order to get the
error handling into effect.
Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
---
fcoemon.c | 31 ++++++++++++++++++++++---------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 3b5210c..c5edd1b 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -3719,11 +3719,6 @@ int main(int argc, char **argv)
if (argc != optind)
fcm_usage();
- if (!fcm_fg && daemon(0, !fcoe_config.use_syslog)) {
- FCM_LOG("Starting daemon failed");
- exit(EXIT_FAILURE);
- }
-
umask(0);
/*
@@ -3770,22 +3765,40 @@ int main(int argc, char **argv)
}
fcm_fcoe_init();
- fcm_fc_events_init();
- fcm_link_init(); /* NETLINK_ROUTE protocol */
+ rc = fcm_fc_events_init();
+ if (rc != 0)
+ exit(1);
+
+ rc = fcm_link_init(); /* NETLINK_ROUTE protocol */
+ if (rc != 0)
+ goto err_cleanup;
+
fcm_dcbd_init();
- fcm_srv_create(&srv_info);
+ rc = fcm_srv_create(&srv_info);
+ if (rc != 0)
+ goto err_cleanup;
+
+ if (!fcm_fg && daemon(0, !fcoe_config.use_syslog)) {
+ FCM_LOG("Starting daemon failed");
+ goto err_cleanup;
+ }
+
sa_select_set_callback(fcm_handle_changes);
rc = sa_select_loop();
if (rc < 0) {
FCM_LOG_ERR(rc, "select error\n");
- exit(EXIT_FAILURE);
+ goto err_cleanup;
}
fcm_dcbd_shutdown();
fcm_srv_destroy(&srv_info);
if (rc == SIGHUP)
fcm_cleanup();
return 0;
+
+err_cleanup:
+ fcm_cleanup();
+ exit(1);
}
/*******************************************************
--
1.8.4.5

View File

@ -1,95 +0,0 @@
From fd085bc2188785859b9ab1f6d27d0fe061baf88c Mon Sep 17 00:00:00 2001
From: Robert Love <robert.w.love@intel.com>
Date: Tue, 15 Oct 2013 01:48:18 +0000
Subject: man: Fix small typo regarding --fcf option
The option is coded as '--fcf', so fix the documentation
to match the implementation.
Reported-by: Xiaowei Li <xiaoli@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
doc/fcoeadm.8 | 18 +++++++-----------
doc/fcoeadm.txt | 4 ++--
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/doc/fcoeadm.8 b/doc/fcoeadm.8
index 11da6e3..2fefd70 100644
--- a/doc/fcoeadm.8
+++ b/doc/fcoeadm.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: fcoeadm
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 11/08/2012
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 10/14/2013
.\" Manual: Open-FCoE Tools
.\" Source: Open-FCoE
.\" Language: English
.\"
-.TH "FCOEADM" "8" "11/08/2012" "Open\-FCoE" "Open\-FCoE Tools"
+.TH "FCOEADM" "8" "10/14/2013" "Open\-FCoE" "Open\-FCoE Tools"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -39,7 +39,7 @@ fcoeadm \- The Open\-FCoE Administration Tool
.sp
\fBfcoeadm\fR \-i|\-\-interface [\fIethX\fR]
.sp
-\fBfcoeadm\fR \-f|\-\-fcfs [\fIethX\fR]
+\fBfcoeadm\fR \-f|\-\-fcf [\fIethX\fR]
.sp
\fBfcoeadm\fR \-t|\-\-target [\fIethX\fR]
.sp
@@ -91,7 +91,7 @@ Rescan for new targets and LUNs on the provided instance\&. This command will no
Show information about the FCoE instance on the specified network interface, or all FCoE instances if no network interface is specified\&.
.RE
.PP
-\fB\-f\fR, \fB\-\-fcfs\fR [\fIethX\fR]
+\fB\-f\fR, \fB\-\-fcf\fR [\fIethX\fR]
.RS 4
Show information about the discovered Fibre Channel Forwarders (FCFs) on the specified network interface, or all discovered FCFs if no network interface is specified\&.
.RE
@@ -143,13 +143,9 @@ command\&.
.RE
.SH "INTERFACE NAMES"
.sp
-The actual name for \fIethX\fR depends on the \fBAUTO_VLAN\fR setting in
-the fcoemon interface configuration (/etc/fcoe/cfg-ethX, see \fBfcoemon\fR)\&.
+The actual name for \fIethX\fR depends on the \fBAUTO_VLAN\fR setting in the fcoemon interface configuration (/etc/fcoe/cfg\-ethX, see \fBfcoemon\fR)\&.
.sp
-If \fBAUTO_VLAN\fR is set to \fIyes\fR, the interface name \fIethX\fR
-references the network device itself. If \fBAUTO_VLAN\fR is set to
-\fIno\fR, the interface name \fIethX\fR references the VLAN device\&.
-.RE
+If \fBAUTO_VLAN\fR is set to \fIyes\fR, the interface name \fIethX\fR references the network device itself\&. If \fBAUTO_VLAN\fR is set to \fIno\fR, the interface name \fIethX\fR references the VLAN device\&.
.SH "EXAMPLES"
.sp
Creates an FCoE instance on eth2\&.101
diff --git a/doc/fcoeadm.txt b/doc/fcoeadm.txt
index 788625c..28ed482 100644
--- a/doc/fcoeadm.txt
+++ b/doc/fcoeadm.txt
@@ -29,7 +29,7 @@ SYNOPSIS
*fcoeadm* -i|--interface [_ethX_]
-*fcoeadm* -f|--fcfs [_ethX_]
+*fcoeadm* -f|--fcf [_ethX_]
*fcoeadm* -t|--target [_ethX_]
@@ -89,7 +89,7 @@ OPERATIONS
Show information about the FCoE instance on the specified network
interface, or all FCoE instances if no network interface is specified.
-*-f*, *--fcfs* [_ethX_]::
+*-f*, *--fcf* [_ethX_]::
Show information about the discovered Fibre Channel Forwarders (FCFs)
on the specified network interface, or all discovered FCFs if no
network interface is specified.
--
1.8.1.4

View File

@ -1,29 +0,0 @@
From 0f63a3ed3a12b4f88f5dd49983cdf3f9b24e9fc8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
Date: Thu, 7 Nov 2013 11:31:11 +0000
Subject: Don't call AM_INIT_AUTOMAKE twice
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This fixes build issues with automake 1.14+.
Signed-off-by: Petr Šabata <contyk@redhat.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
configure.ac | 1 -
1 file changed, 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 73c140f..bb1385b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,4 @@
AC_INIT([fcoe-utils], [1.0.29], [fcoe-devel@open-fcoe.org])
-AM_INIT_AUTOMAKE([foreign])
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
AM_INIT_AUTOMAKE([foreign])
--
1.8.1.4

View File

@ -0,0 +1,83 @@
From 91c0c8c0a37af40b3fb4a37df6490a226348d152 Mon Sep 17 00:00:00 2001
From: Vasu Dev <vasu.dev@intel.com>
Date: Fri, 5 Jun 2015 14:52:10 -0700
Subject: fcoemon: fix IEEE state machine
Fix IEEE state machine for these issues:-
- fcoeadm scan not working
- fcoeadm reset not working
- periodic fipvlan issuance even after fcoe instance created
These issues are due to current IEEE states are not correctly
handled. The validate_ieee_info() return either activate or
wait actions and out of that only activate is really used to
enable fcoe instance and none other action are applicable in
IEEE state machine, so reduced to only activate and then
advance the state machine to new IEEE_ACTIVE state to allow
processing of scan & reset command once interface activated.
This also fixes fipvlan issuance issue beside fixing scan and
reset fcoeadm commands.
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Tested-By: Jack Morgan<jack.morgan@intel.com>
---
fcoemon.c | 19 +++++++------------
fcoemon.h | 1 +
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index c5edd1b..c0af99b 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -1341,6 +1341,7 @@ STR_ARR(ieee_states, "Unknown", "Out of range",
[IEEE_INIT] = "IEEE_INIT",
[IEEE_GET_STATE] = "IEEE_GET_STATE",
[IEEE_DONE] = "IEEE_DONE",
+ [IEEE_ACTIVE] = "IEEE_ACTIVE",
);
static void
@@ -3054,20 +3055,14 @@ static void fcm_netif_ieee_advance(struct fcm_netif *ff)
break;
case IEEE_DONE:
action = validate_ieee_info(ff);
- switch (action) {
- case FCP_DESTROY_IF:
- case FCP_ENABLE_IF:
- case FCP_ACTIVATE_IF:
+ if (action == FCP_ACTIVATE_IF) {
fcp_action_set(ff->ifname, action);
- break;
- case FCP_DISABLE_IF:
- case FCP_ERROR:
- fcp_action_set(ff->ifname, FCP_DISABLE_IF);
- break;
- case FCP_WAIT:
- default:
- break;
+ ieee_state_set(ff, IEEE_ACTIVE);
}
+ break;
+ case IEEE_ACTIVE:
+ /* TBD enable and disable if needed in IEEE mode */
+ break;
default:
break;
}
diff --git a/fcoemon.h b/fcoemon.h
index c2ed7b1..3869bae 100644
--- a/fcoemon.h
+++ b/fcoemon.h
@@ -80,6 +80,7 @@ enum ieee_state {
IEEE_INIT = 0, /* Starting state */
IEEE_GET_STATE, /* Getting IEEE DCB state */
IEEE_DONE, /* Received IEEE DCB state */
+ IEEE_ACTIVE, /* IEEE is in ACTIVE state */
IEEE_ERROR, /* Error receiving IEEE DCB state */
};
--
1.8.4.5

View File

@ -1,52 +0,0 @@
From 921a055f5ea6b68f16db585e985eb24b4c32be2c Mon Sep 17 00:00:00 2001
From: Raju Chakraborty <rajuchak@linux.vnet.ibm.com>
Date: Mon, 18 Nov 2013 14:33:13 +0000
Subject: fipvlan fails on powerpc
fipvlan fails to execute properly on powerpc architecture.
# fipvlan -a
Try 'fipvlan --help' for more information
#
# fipvlan --create --start eth1
Try 'fipvlan --help' for more information
#
In power pc systems, when there are no more arguments to be parsed, getopt_long
should return -1. But gdb output shows that it c is 255 whereas in intel system
it shows -1 properly.
"char" must not be trusted when signing is important! Different arches (and even
different gcc versions on the same arch) may default char to signed or unsigned.
Ideally, a portable program should always use signed char or unsigned char when
it depends on the signedness of an object. But many programs have been written
to use plain char and expect it to be signed, or expect it to be unsigned,
depending on the machines they were written for. In this case the variable c
is expected to behave as signed and hence using signed would be the safe option.
http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/C-Dialect-Options.html
Signed-off-by: Raju Chakraborty<rajuchak@linux.vnet.ibm.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fipvlan.c b/fipvlan.c
index 6f8cf39..e51358f 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -471,7 +471,7 @@ static void help(int status)
static void parse_cmdline(int argc, char **argv)
{
- char c;
+ signed char c;
while (1) {
c = getopt_long(argc, argv, GETOPT_STR, long_options, NULL);
--
1.8.1.4

View File

@ -1,4 +1,4 @@
From 444f3c66ee5a2b59a563d78cb70db7da2326d446 Mon Sep 17 00:00:00 2001 From 4cb4df057df03ce1ccc81b2778b5090d1443ae15 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de> From: Hannes Reinecke <hare@suse.de>
Date: Fri, 21 Mar 2014 14:46:40 +0100 Date: Fri, 21 Mar 2014 14:46:40 +0100
Subject: systemctl cannot start fcoemon.socket Subject: systemctl cannot start fcoemon.socket
@ -27,5 +27,5 @@ index 4de8715..fdf7141 100644
PassCredentials=true PassCredentials=true
-- --
1.8.1.4 1.8.4.5

View File

@ -1,4 +1,4 @@
From 5216ae2ef4434d92ff3d49c4d5a7b73b438aee2d Mon Sep 17 00:00:00 2001 From 1e3d735a5cd1edefaeff75c43aed68661b8cda7e Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de> From: Hannes Reinecke <hare@suse.de>
Date: Fri, 11 Apr 2014 15:38:26 +0200 Date: Fri, 11 Apr 2014 15:38:26 +0200
Subject: fcoemon: Correctly handle options in the service file Subject: fcoemon: Correctly handle options in the service file
@ -55,7 +55,7 @@ index 5e5c8a2..2e10bcd 100644
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
diff --git a/fcoemon.c b/fcoemon.c diff --git a/fcoemon.c b/fcoemon.c
index 5e4f8d7..23fc2f6 100644 index c0af99b..3ccdd5f 100644
--- a/fcoemon.c --- a/fcoemon.c
+++ b/fcoemon.c +++ b/fcoemon.c
@@ -336,9 +336,9 @@ static int fcoe_vid_from_ifname(const char *ifname); @@ -336,9 +336,9 @@ static int fcoe_vid_from_ifname(const char *ifname);
@ -70,7 +70,7 @@ index 5e4f8d7..23fc2f6 100644
{"exec", 1, NULL, 'e'}, {"exec", 1, NULL, 'e'},
{"foreground", 0, NULL, 'f'}, {"foreground", 0, NULL, 'f'},
{"version", 0, NULL, 'v'}, {"version", 0, NULL, 'v'},
@@ -3192,9 +3192,9 @@ static void fcm_usage(void) @@ -3229,9 +3229,9 @@ static void fcm_usage(void)
{ {
printf("Usage: %s\n" printf("Usage: %s\n"
"\t [-f|--foreground]\n" "\t [-f|--foreground]\n"
@ -82,7 +82,7 @@ index 5e4f8d7..23fc2f6 100644
"\t [-v|--version]\n" "\t [-v|--version]\n"
"\t [-h|--help]\n\n", progname); "\t [-h|--help]\n\n", progname);
exit(1); exit(1);
@@ -3648,22 +3648,28 @@ int main(int argc, char **argv) @@ -3685,22 +3685,28 @@ int main(int argc, char **argv)
sa_log_flags = 0; sa_log_flags = 0;
openlog(sa_log_prefix, LOG_CONS, LOG_DAEMON); openlog(sa_log_prefix, LOG_CONS, LOG_DAEMON);
@ -117,5 +117,5 @@ index 5e4f8d7..23fc2f6 100644
case 'v': case 'v':
printf("%s\n", FCOE_UTILS_VERSION); printf("%s\n", FCOE_UTILS_VERSION);
-- --
1.8.1.4 1.8.4.5

View File

@ -1,45 +0,0 @@
From 29d172232050386b456da62bf873278bb90d4676 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:01 +0000
Subject: fipvlan: Only shutdown interfaces if no vlans are created
Instead of having to check the individual stages we can
easier just check if any vlans are created. Vlans are
only created if the user specified '--create', so if
no VLANs are created either the user has not specified
it or some error occured along the line. In either case
we can shutdown the interface.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index e51358f..4559e07 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -857,8 +857,7 @@ static void cleanup_interfaces(void)
if (config.automode) {
TAILQ_FOREACH(iff, &interfaces, list_node) {
- if (iff->linkup_sent &&
- (!iff->running || !iff->req_sent || !iff->resp_recv)) {
+ if (iff->linkup_sent && TAILQ_EMPTY(&iff->vlans)) {
FIP_LOG_DBG("shutdown if %d",
iff->ifindex);
rtnl_set_iff_down(iff->ifindex, NULL);
@@ -872,8 +871,7 @@ static void cleanup_interfaces(void)
skipped++;
continue;
}
- if (iff->linkup_sent &&
- (!iff->running || !iff->req_sent || !iff->resp_recv)) {
+ if (iff->linkup_sent && TAILQ_EMPTY(&iff->vlans)) {
FIP_LOG_DBG("shutdown if %d",
iff->ifindex);
rtnl_set_iff_down(iff->ifindex, NULL);
--
1.8.1.4

View File

@ -1,4 +1,4 @@
From 1b7dc959d70679a3536ccbeb6b3a8d0905606537 Mon Sep 17 00:00:00 2001 From 475d3e782f84beec9ce7b4557f2444df0e2f914f Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de> From: Hannes Reinecke <hare@suse.de>
Date: Wed, 16 Apr 2014 13:30:47 +0200 Date: Wed, 16 Apr 2014 13:30:47 +0200
Subject: fcoe.service: Add '--foreground' to prevent fcoemon to be killed Subject: fcoe.service: Add '--foreground' to prevent fcoemon to be killed
@ -29,5 +29,5 @@ index 2e10bcd..b1d9567 100644
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
-- --
1.7.12.4 1.8.4.5

View File

@ -1,53 +0,0 @@
From ef209fd4f68fb90f85f89612ebbf9c3e8843f33c Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:02 +0000
Subject: fipvlan: start VLAN interface from netlink handler
Instead of starting the VLAN interface after the call to
vlan_create() we should rather start it after the netlink
message has been received. Otherwise we have a race window
as we might try to start a network interface which isn't
present yet.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 4559e07..148d823 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -416,11 +416,16 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
parse_vlaninfo(vlan, linkinfo[IFLA_INFO_DATA]);
iff->vid = *(int *)RTA_DATA(vlan[IFLA_VLAN_ID]);
real_dev = find_vlan_real_dev(iff);
- if (real_dev)
- TAILQ_INSERT_TAIL(&real_dev->vlans,
- iff, list_node);
- else
+ if (!real_dev) {
free(iff);
+ return;
+ }
+ TAILQ_INSERT_TAIL(&real_dev->vlans, iff, list_node);
+ if (!iff->running) {
+ FIP_LOG_DBG("vlan if %d not running, "
+ "starting", iff->ifindex);
+ rtnl_set_iff_up(iff->ifindex, NULL);
+ }
return;
}
/* ignore bonding interfaces */
@@ -581,7 +586,6 @@ create_missing_vlans_list(struct fcf_list_head *list, const char *label)
vlan_name, strerror(-rc));
else
printf("Created VLAN device %s\n", vlan_name);
- rtnl_set_iff_up(0, vlan_name);
}
printf("\n");
}
--
1.8.1.4

View File

@ -1,110 +0,0 @@
From 6ce709fd271ace5a549a43f11343638273684916 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:03 +0000
Subject: fipvlan: Extract create_missing_vlan function from loop
No functional change.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 74 +++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 41 insertions(+), 33 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 148d823..d91cc1c 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -544,48 +544,56 @@ static int rtnl_listener_handler(struct nlmsghdr *nh, UNUSED void *arg)
return -1;
}
-static void
-create_missing_vlans_list(struct fcf_list_head *list, const char *label)
+static int
+create_missing_vlan(struct fcf *fcf, const char *label)
{
- struct fcf *fcf;
struct iff *real_dev, *vlan;
char vlan_name[IFNAMSIZ];
int rc;
+ real_dev = lookup_iff(fcf->ifindex, NULL);
+ if (!real_dev) {
+ FIP_LOG_ERR(ENODEV,
+ "lost device %d with discovered %s?\n",
+ fcf->ifindex, label);
+ return -ENXIO;
+ }
+ if (!fcf->vlan) {
+ /*
+ * If the vlan notification has VLAN id 0,
+ * skip creating vlan interface, and FCoE is
+ * started on the physical interface itself.
+ */
+ FIP_LOG_DBG("VLAN id is 0 for %s\n", real_dev->ifname);
+ return -EPERM;
+ }
+ vlan = lookup_vlan(fcf->ifindex, fcf->vlan);
+ if (vlan) {
+ FIP_LOG_DBG("VLAN %s.%d already exists as %s\n",
+ real_dev->ifname, fcf->vlan, vlan->ifname);
+ return -EEXIST;
+ }
+ snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
+ real_dev->ifname, fcf->vlan, config.suffix);
+ rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
+ if (rc < 0)
+ printf("Failed to create VLAN device %s\n\t%s\n",
+ vlan_name, strerror(-rc));
+ else
+ printf("Created VLAN device %s\n", vlan_name);
+ return rc;
+}
+
+static void
+create_missing_vlans_list(struct fcf_list_head *list, const char *label)
+{
+ struct fcf *fcf;
+
if (!config.create)
return;
TAILQ_FOREACH(fcf, list, list_node) {
- real_dev = lookup_iff(fcf->ifindex, NULL);
- if (!real_dev) {
- FIP_LOG_ERR(ENODEV,
- "lost device %d with discovered %s?\n",
- fcf->ifindex, label);
- continue;
- }
- if (!fcf->vlan) {
- /*
- * If the vlan notification has VLAN id 0,
- * skip creating vlan interface, and FCoE is
- * started on the physical interface itself.
- */
- FIP_LOG_DBG("VLAN id is 0 for %s\n", real_dev->ifname);
- continue;
- }
- vlan = lookup_vlan(fcf->ifindex, fcf->vlan);
- if (vlan) {
- FIP_LOG_DBG("VLAN %s.%d already exists as %s\n",
- real_dev->ifname, fcf->vlan, vlan->ifname);
- continue;
- }
- snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
- real_dev->ifname, fcf->vlan, config.suffix);
- rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
- if (rc < 0)
- printf("Failed to create VLAN device %s\n\t%s\n",
- vlan_name, strerror(-rc));
- else
- printf("Created VLAN device %s\n", vlan_name);
+ create_missing_vlan(fcf, label);
}
printf("\n");
}
--
1.8.1.4

View File

@ -1,4 +1,4 @@
From 16765b7b091f8130ae001af7693895ffe0886a0e Mon Sep 17 00:00:00 2001 From 311c26a073f4397f10408c288af28cf593f46336 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de> From: Hannes Reinecke <hare@suse.de>
Date: Tue, 13 May 2014 09:44:17 +0200 Date: Tue, 13 May 2014 09:44:17 +0200
Subject: fipvlan: fixup return value on error Subject: fipvlan: fixup return value on error
@ -12,10 +12,10 @@ Signed-off-by: Hannes Reinecke <hare@suse.de>
1 file changed, 2 insertions(+), 2 deletions(-) 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c diff --git a/fipvlan.c b/fipvlan.c
index c5f3d3f..3300c68 100644 index 288b011..9f3b07d 100644
--- a/fipvlan.c --- a/fipvlan.c
+++ b/fipvlan.c +++ b/fipvlan.c
@@ -982,7 +982,7 @@ int main(int argc, char **argv) @@ -981,7 +981,7 @@ int main(int argc, char **argv)
ns = rtnl_socket(); ns = rtnl_socket();
if (ns < 0) { if (ns < 0) {
@ -24,7 +24,7 @@ index c5f3d3f..3300c68 100644
goto ns_err; goto ns_err;
} }
pfd_add(ns); pfd_add(ns);
@@ -1002,7 +1002,7 @@ int main(int argc, char **argv) @@ -1001,7 +1001,7 @@ int main(int argc, char **argv)
"no interfaces to perform discovery on"); "no interfaces to perform discovery on");
else else
FIP_LOG("no interfaces to perform discovery on"); FIP_LOG("no interfaces to perform discovery on");
@ -34,5 +34,5 @@ index c5f3d3f..3300c68 100644
do_vlan_discovery(); do_vlan_discovery();
-- --
1.7.12.4 1.8.4.5

View File

@ -1,4 +1,4 @@
From b19353bfa3186334611109456b232e596335c15e Mon Sep 17 00:00:00 2001 From 53a1a696c33fc64c76bd29831ed61c8e50fbc495 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de> From: Hannes Reinecke <hare@suse.de>
Date: Wed, 14 May 2014 16:01:10 +0200 Date: Wed, 14 May 2014 16:01:10 +0200
Subject: fipvlan: clean up state machine for pfd_add Subject: fipvlan: clean up state machine for pfd_add
@ -12,10 +12,10 @@ Signed-off-by: Hannes Reinecke <hare@suse.de>
1 file changed, 14 insertions(+), 3 deletions(-) 1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c diff --git a/fipvlan.c b/fipvlan.c
index 3300c68..2211fd1 100644 index 9f3b07d..a183233 100644
--- a/fipvlan.c --- a/fipvlan.c
+++ b/fipvlan.c +++ b/fipvlan.c
@@ -397,10 +397,17 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh) @@ -398,10 +398,17 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
/* already tracking, update operstate and return */ /* already tracking, update operstate and return */
iff->running = running; iff->running = running;
if (!iff->running) { if (!iff->running) {
@ -35,7 +35,7 @@ index 3300c68..2211fd1 100644
if (!config.start) if (!config.start)
return; return;
@@ -440,6 +447,7 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh) @@ -441,6 +448,7 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
iff->ifindex = ifm->ifi_index; iff->ifindex = ifm->ifi_index;
iff->running = running; iff->running = running;
iff->fip_ready = false; iff->fip_ready = false;
@ -43,7 +43,7 @@ index 3300c68..2211fd1 100644
if (ifla[IFLA_LINK]) if (ifla[IFLA_LINK])
iff->iflink = *(int *)RTA_DATA(ifla[IFLA_LINK]); iff->iflink = *(int *)RTA_DATA(ifla[IFLA_LINK]);
else else
@@ -827,7 +835,8 @@ static int probe_fip_interface(struct iff *iff) @@ -814,7 +822,8 @@ static int probe_fip_interface(struct iff *iff)
if (iff->req_sent) if (iff->req_sent)
return 0; return 0;
@ -53,7 +53,7 @@ index 3300c68..2211fd1 100644
iff->ps = fip_socket(iff->ifindex, FIP_NONE); iff->ps = fip_socket(iff->ifindex, FIP_NONE);
if (iff->ps < 0) { if (iff->ps < 0) {
FIP_LOG_DBG("if %d not ready\n", iff->ifindex); FIP_LOG_DBG("if %d not ready\n", iff->ifindex);
@@ -835,6 +844,8 @@ static int probe_fip_interface(struct iff *iff) @@ -822,6 +831,8 @@ static int probe_fip_interface(struct iff *iff)
} }
setsockopt(iff->ps, SOL_PACKET, PACKET_ORIGDEV, setsockopt(iff->ps, SOL_PACKET, PACKET_ORIGDEV,
&origdev, sizeof(origdev)); &origdev, sizeof(origdev));
@ -63,5 +63,5 @@ index 3300c68..2211fd1 100644
iff->fip_ready = true; iff->fip_ready = true;
} }
-- --
1.7.12.4 1.8.4.5

View File

@ -1,143 +0,0 @@
From ac1fc202b5efda33df3445c2a60709264a0032e5 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:04 +0000
Subject: fipvlan: create VLANs from netlink handler
Instead of having its own loop we should better create VLANs
directly from the netlink handler. With this we can eliminate
the create_missing_vlans() loop.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 77 +++++++++++++++++++++++++--------------------------------------
1 file changed, 30 insertions(+), 47 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index d91cc1c..501f79c 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -157,6 +157,8 @@ struct fcf {
struct fcf_list_head fcfs = TAILQ_HEAD_INITIALIZER(fcfs);
static struct fcf_list_head vn2vns = TAILQ_HEAD_INITIALIZER(vn2vns);
+static int create_and_start_vlan(struct fcf *fcf, bool vn2vn);
+
static struct fcf *lookup_fcf(struct fcf_list_head *head, int ifindex,
uint16_t vlan, unsigned char *mac)
{
@@ -316,6 +318,9 @@ static int fip_recv_vlan_note(struct fiphdr *fh, int ifindex, bool vn2vn)
fcf->vlan = vlan;
memcpy(fcf->mac_addr, tlvs.mac->mac_addr, ETHER_ADDR_LEN);
TAILQ_INSERT_TAIL(head, fcf, list_node);
+ if (!config.create)
+ continue;
+ create_and_start_vlan(fcf, vn2vn);
}
return 0;
@@ -545,7 +550,7 @@ static int rtnl_listener_handler(struct nlmsghdr *nh, UNUSED void *arg)
}
static int
-create_missing_vlan(struct fcf *fcf, const char *label)
+create_and_start_vlan(struct fcf *fcf, bool vn2vn)
{
struct iff *real_dev, *vlan;
char vlan_name[IFNAMSIZ];
@@ -555,7 +560,7 @@ create_missing_vlan(struct fcf *fcf, const char *label)
if (!real_dev) {
FIP_LOG_ERR(ENODEV,
"lost device %d with discovered %s?\n",
- fcf->ifindex, label);
+ fcf->ifindex, vn2vn ? "VN2VN" : "FCF");
return -ENXIO;
}
if (!fcf->vlan) {
@@ -565,45 +570,31 @@ create_missing_vlan(struct fcf *fcf, const char *label)
* started on the physical interface itself.
*/
FIP_LOG_DBG("VLAN id is 0 for %s\n", real_dev->ifname);
- return -EPERM;
- }
- vlan = lookup_vlan(fcf->ifindex, fcf->vlan);
- if (vlan) {
- FIP_LOG_DBG("VLAN %s.%d already exists as %s\n",
- real_dev->ifname, fcf->vlan, vlan->ifname);
- return -EEXIST;
- }
- snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
- real_dev->ifname, fcf->vlan, config.suffix);
- rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
- if (rc < 0)
- printf("Failed to create VLAN device %s\n\t%s\n",
- vlan_name, strerror(-rc));
- else
+ vlan = real_dev;
+ } else {
+ vlan = lookup_vlan(fcf->ifindex, fcf->vlan);
+ if (vlan) {
+ FIP_LOG_DBG("VLAN %s.%d already exists as %s\n",
+ real_dev->ifname, fcf->vlan, vlan->ifname);
+ return 0;
+ }
+ snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
+ real_dev->ifname, fcf->vlan, config.suffix);
+ rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
+ if (rc < 0) {
+ printf("Failed to create VLAN device %s\n\t%s\n",
+ vlan_name, strerror(-rc));
+ return rc;
+ }
printf("Created VLAN device %s\n", vlan_name);
- return rc;
-}
-
-static void
-create_missing_vlans_list(struct fcf_list_head *list, const char *label)
-{
- struct fcf *fcf;
-
- if (!config.create)
- return;
-
- TAILQ_FOREACH(fcf, list, list_node) {
- create_missing_vlan(fcf, label);
}
- printf("\n");
-}
-
-static void create_missing_vlans(void)
-{
- if (!TAILQ_EMPTY(&fcfs))
- create_missing_vlans_list(&fcfs, "FCF");
- if (!TAILQ_EMPTY(&vn2vns))
- create_missing_vlans_list(&vn2vns, "VN2VN");
+ if (config.start && !vlan->running) {
+ FIP_LOG_DBG("%s if %d not running, "
+ "starting", vlan == real_dev ? "real" : "vlan",
+ vlan->ifindex);
+ rtnl_set_iff_up(vlan->ifindex, NULL);
+ }
+ return rc;
}
static int fcoe_mod_instance_start(const char *ifname)
@@ -957,14 +948,6 @@ int main(int argc, char **argv)
do_vlan_discovery();
rc = print_results();
- if (!rc && config.create) {
- create_missing_vlans();
- /*
- * need to listen for the RTM_NETLINK messages
- * about the new VLAN devices
- */
- recv_loop(500);
- }
if (!rc && config.start)
start_fcoe();
--
1.8.1.4

View File

@ -1,4 +1,4 @@
From 348489108793c83ec6ebbdba87888888219ca59d Mon Sep 17 00:00:00 2001 From 7f267031c30b6bc9fe708efac4d00060c583ae64 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de> From: Hannes Reinecke <hare@suse.de>
Date: Mon, 28 Jul 2014 11:24:19 +0200 Date: Mon, 28 Jul 2014 11:24:19 +0200
Subject: Use correct socket for fcoemon.socket Subject: Use correct socket for fcoemon.socket

View File

@ -1,154 +0,0 @@
From 16e421a30caae0e2968941c7bde48f512d9ec106 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:05 +0000
Subject: fipvlan: Start FCoE from netlink handler
Whenever a VLAN or real device is found to have a FCF record
we can go ahead and start FCoE. With this change we can remove
the start_fcoe() loop.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 83 ++++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 47 insertions(+), 36 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 501f79c..9261b1d 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -139,6 +139,7 @@ struct iff {
bool req_sent;
bool resp_recv;
bool fip_ready;
+ bool fcoe_started;
TAILQ_ENTRY(iff) list_node;
struct iff_list_head vlans;
};
@@ -367,8 +368,14 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
struct rtattr *linkinfo[__IFLA_INFO_MAX];
struct rtattr *vlan[__IFLA_VLAN_MAX];
struct iff *iff, *real_dev;
+ struct fcf_list_head *head;
bool running;
+ if (config.vn2vn)
+ head = &vn2vns;
+ else
+ head = &fcfs;
+
FIP_LOG_DBG("RTM_NEWLINK: ifindex %d, type %d, flags %x",
ifm->ifi_index, ifm->ifi_type, ifm->ifi_flags);
@@ -383,12 +390,38 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
running = !!(ifm->ifi_flags & (IFF_RUNNING | IFF_SLAVE));
iff = lookup_iff(ifm->ifi_index, NULL);
if (iff) {
+ int ifindex;
+
/* already tracking, update operstate and return */
iff->running = running;
- if (iff->running)
- pfd_add(iff->ps);
- else
+ if (!iff->running) {
pfd_remove(iff->ps);
+ return;
+ }
+ pfd_add(iff->ps);
+ if (!config.start)
+ return;
+
+ FIP_LOG_DBG("Checking for FCoE on %sif %d",
+ iff->is_vlan ? "VLAN " : "", iff->ifindex);
+ if (iff->is_vlan) {
+ real_dev = find_vlan_real_dev(iff);
+ if (!real_dev) {
+ FIP_LOG_ERR(ENODEV, "VLAN %d without a parent",
+ iff->ifindex);
+ return;
+ }
+ ifindex = real_dev->ifindex;
+ } else
+ ifindex = iff->ifindex;
+
+ if (!iff->fcoe_started &&
+ lookup_fcf(head, ifindex, iff->vid, NULL)) {
+ printf("Starting FCoE on interface %s\n",
+ iff->ifname);
+ fcoe_instance_start(iff->ifname);
+ iff->fcoe_started = true;
+ }
return;
}
@@ -588,11 +621,19 @@ create_and_start_vlan(struct fcf *fcf, bool vn2vn)
}
printf("Created VLAN device %s\n", vlan_name);
}
- if (config.start && !vlan->running) {
- FIP_LOG_DBG("%s if %d not running, "
- "starting", vlan == real_dev ? "real" : "vlan",
+ if (!config.start)
+ return rc;
+
+ if (!vlan->running) {
+ FIP_LOG_DBG("%s if %d not running, starting",
+ vlan == real_dev ? "real" : "vlan",
vlan->ifindex);
rtnl_set_iff_up(vlan->ifindex, NULL);
+ } else if (!vlan->fcoe_started) {
+ printf("Starting FCoE on interface %s\n",
+ vlan->ifname);
+ fcoe_instance_start(vlan->ifname);
+ vlan->fcoe_started = true;
}
return rc;
}
@@ -669,34 +710,6 @@ static void determine_libfcoe_interface(void)
}
}
-static void start_fcoe(void)
-{
- struct fcf_list_head *head;
- struct fcf *fcf;
- struct iff *iff;
-
- if (config.vn2vn)
- head = &vn2vns;
- else
- head = &fcfs;
-
- TAILQ_FOREACH(fcf, head, list_node) {
- if (fcf->vlan)
- iff = lookup_vlan(fcf->ifindex, fcf->vlan);
- else
- iff = lookup_iff(fcf->ifindex, NULL);
- if (!iff) {
- FIP_LOG_ERR(ENODEV,
- "Cannot start FCoE on VLAN %d, ifindex %d, "
- "because the VLAN device does not exist",
- fcf->vlan, fcf->ifindex);
- continue;
- }
- printf("Starting FCoE on interface %s\n", iff->ifname);
- fcoe_instance_start(iff->ifname);
- }
-}
-
static void print_list(struct fcf_list_head *list, const char *label)
{
struct iff *iff;
@@ -948,8 +961,6 @@ int main(int argc, char **argv)
do_vlan_discovery();
rc = print_results();
- if (!rc && config.start)
- start_fcoe();
cleanup_interfaces();
--
1.8.1.4

View File

@ -1,73 +0,0 @@
From 9f5e376f3cf16bdd83d731fdc02a877e78a75c26 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:06 +0000
Subject: fipvlan: Update wait loop to wait for VLANs
The wait loop should be waiting for any VLAN to become activated,
otherwise we might fail too early.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 9261b1d..e7a0016 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -845,7 +845,7 @@ static void do_vlan_discovery(void)
struct iff *iff;
int retry_count = 0;
int skip_retry_count = 0;
- int skipped = 0;
+ int skipped = 0, retry_iff = 0;
retry:
skipped += send_vlan_requests();
if (skipped && skip_retry_count++ < config.link_retry) {
@@ -856,13 +856,38 @@ retry:
goto retry;
}
recv_loop(200);
- TAILQ_FOREACH(iff, &interfaces, list_node)
+ TAILQ_FOREACH(iff, &interfaces, list_node) {
+ if (!iff->running && iff->linkup_sent) {
+ FIP_LOG_DBG("if %d: waiting for IFF_RUNNING [%d]\n",
+ iff->ifindex, retry_count);
+ retry_iff++;
+ continue;
+ }
/* if we did not receive a response, retry */
- if (iff->req_sent && !iff->resp_recv &&
- retry_count++ < MAX_VLAN_RETRIES) {
+ if (iff->req_sent && !iff->resp_recv) {
FIP_LOG_DBG("VLAN discovery RETRY [%d]", retry_count);
- goto retry;
+ retry_iff++;
+ continue;
}
+ if (config.create) {
+ struct iff *vlan;
+
+ TAILQ_FOREACH(vlan, &iff->vlans, list_node) {
+ if (!vlan->running) {
+ FIP_LOG_DBG("vlan %d: waiting for "
+ "IFF_RUNNING [%d]",
+ vlan->ifindex, retry_count);
+ retry_iff++;
+ continue;
+ }
+ }
+ }
+ }
+ if (retry_iff && retry_count++ < config.link_retry) {
+ recv_loop(1000);
+ retry_iff = 0;
+ goto retry;
+ }
}
static void cleanup_interfaces(void)
--
1.8.1.4

View File

@ -1,34 +0,0 @@
From 3ded1660f3e2eb79e4dd8155996b0802b6ee664b Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:07 +0000
Subject: fipvlan: Re-send VLAN discovery
Some switches might decide to discard the VLAN discovery request,
so we should rather re-send it whenever we need to retry.
At worst we will be receiving several responses, but they'll be
discarded.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fipvlan.c b/fipvlan.c
index e7a0016..9ef4025 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -865,7 +865,9 @@ retry:
}
/* if we did not receive a response, retry */
if (iff->req_sent && !iff->resp_recv) {
- FIP_LOG_DBG("VLAN discovery RETRY [%d]", retry_count);
+ FIP_LOG_DBG("if %d: VLAN discovery RETRY [%d]",
+ iff->ifindex, retry_count);
+ iff->req_sent = false;
retry_iff++;
continue;
}
--
1.8.1.4

View File

@ -1,61 +0,0 @@
From 9ade5c67217915aaf38a9e239503d3c982ab6300 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:08 +0000
Subject: fipvlan: update manpage
'-d' was missing on one instance.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
doc/fipvlan.8 | 8 ++++----
doc/fipvlan.txt | 3 ++-
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/doc/fipvlan.8 b/doc/fipvlan.8
index f81cb3a..5eebfbf 100644
--- a/doc/fipvlan.8
+++ b/doc/fipvlan.8
@@ -1,13 +1,13 @@
'\" t
.\" Title: fipvlan
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 03/18/2013
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 12/02/2013
.\" Manual: Open-FCoE Tools
.\" Source: Open-FCoE
.\" Language: English
.\"
-.TH "FIPVLAN" "8" "03/18/2013" "Open\-FCoE" "Open\-FCoE Tools"
+.TH "FIPVLAN" "8" "12/02/2013" "Open\-FCoE" "Open\-FCoE Tools"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -29,7 +29,7 @@
fipvlan \- Fibre Channel over Ethernet VLAN Discovery
.SH "SYNOPSIS"
.sp
-\fBfipvlan\fR [\-c|\-\-create] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] \fIinterfaces\fR
+\fBfipvlan\fR [\-c|\-\-create] [\-d|\-\-debug] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] \fIinterfaces\fR
.sp
\fBfipvlan\fR \-a|\-\-auto [\-c|\-\-create] [\-d|\-\-debug] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] [\-l|\-\-link\-retry \fIcount\fR]
.sp
diff --git a/doc/fipvlan.txt b/doc/fipvlan.txt
index 9699197..0f2151e 100644
--- a/doc/fipvlan.txt
+++ b/doc/fipvlan.txt
@@ -19,7 +19,8 @@ fipvlan - Fibre Channel over Ethernet VLAN Discovery
SYNOPSIS
--------
-*fipvlan* [-c|--create] [-s|--start] [-m|--mode fabric|vn2vn] _interfaces_
+*fipvlan* [-c|--create] [-d|--debug] [-s|--start]
+ [-m|--mode fabric|vn2vn] _interfaces_
*fipvlan* -a|--auto [-c|--create] [-d|--debug]
[-s|--start] [-m|--mode fabric|vn2vn] [-l|--link-retry _count_]
--
1.8.1.4

View File

@ -1,171 +0,0 @@
From 0559d7dd7f3e1fff5a76d45bf4c0ca5944640af6 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:09 +0000
Subject: fipvlan: Leave link up if requested
This patch adds an option '-u' / '--link-up' to leave the network
interface running if a FIP response has been received.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
doc/fipvlan.8 | 9 +++++++--
doc/fipvlan.txt | 6 +++++-
fipvlan.c | 37 ++++++++++++++++++++++++++-----------
3 files changed, 38 insertions(+), 14 deletions(-)
diff --git a/doc/fipvlan.8 b/doc/fipvlan.8
index 5eebfbf..927e557 100644
--- a/doc/fipvlan.8
+++ b/doc/fipvlan.8
@@ -29,9 +29,9 @@
fipvlan \- Fibre Channel over Ethernet VLAN Discovery
.SH "SYNOPSIS"
.sp
-\fBfipvlan\fR [\-c|\-\-create] [\-d|\-\-debug] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] \fIinterfaces\fR
+\fBfipvlan\fR [\-c|\-\-create] [\-d|\-\-debug] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] [\-u|\-\-link\-up] \fIinterfaces\fR
.sp
-\fBfipvlan\fR \-a|\-\-auto [\-c|\-\-create] [\-d|\-\-debug] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] [\-l|\-\-link\-retry \fIcount\fR]
+\fBfipvlan\fR \-a|\-\-auto [\-c|\-\-create] [\-d|\-\-debug] [\-s|\-\-start] [\-m|\-\-mode fabric|vn2vn] [\-l|\-\-link\-retry \fIcount\fR] [\-u|\-\-link\-up]
.sp
\fBfipvlan\fR \-h|\-\-help
.sp
@@ -86,6 +86,11 @@ Retry check for link up to
times\&. The link state is checked every 500 ms\&. The default number of retries is 20\&.
.RE
.PP
+\fB\-u\fR, \fB\-\-link\-up\fR
+.RS 4
+Leave link up if a FIP response has been received\&.
+.RE
+.PP
\fB\-h\fR, \fB\-\-help\fR
.RS 4
Display a help message with basic usage instructions
diff --git a/doc/fipvlan.txt b/doc/fipvlan.txt
index 0f2151e..cbed16f 100644
--- a/doc/fipvlan.txt
+++ b/doc/fipvlan.txt
@@ -20,10 +20,11 @@ fipvlan - Fibre Channel over Ethernet VLAN Discovery
SYNOPSIS
--------
*fipvlan* [-c|--create] [-d|--debug] [-s|--start]
- [-m|--mode fabric|vn2vn] _interfaces_
+ [-m|--mode fabric|vn2vn] [-u|--link-up] _interfaces_
*fipvlan* -a|--auto [-c|--create] [-d|--debug]
[-s|--start] [-m|--mode fabric|vn2vn] [-l|--link-retry _count_]
+ [-u|--link-up]
*fipvlan* -h|--help
@@ -76,6 +77,9 @@ OPTIONS
Retry check for link up to _count_ times. The link state is
checked every 500 ms. The default number of retries is 20.
+*-u*, *--link-up*::
+ Leave link up if a FIP response has been received.
+
*-h*, *--help*::
Display a help message with basic usage instructions
diff --git a/fipvlan.c b/fipvlan.c
index 9ef4025..a865481 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -67,6 +67,7 @@ struct {
bool start;
bool vn2vn;
bool debug;
+ bool link_up;
int link_retry;
char suffix[256];
} config = {
@@ -76,6 +77,7 @@ struct {
.create = false,
.vn2vn = false,
.debug = false,
+ .link_up = false,
.link_retry = 20,
.suffix = "",
};
@@ -478,7 +480,7 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
/* command line arguments */
-#define GETOPT_STR "acdf:l:m:shv"
+#define GETOPT_STR "acdf:l:m:suhv"
static const struct option long_options[] = {
{ "auto", no_argument, NULL, 'a' },
@@ -488,6 +490,7 @@ static const struct option long_options[] = {
{ "suffix", required_argument, NULL, 'f' },
{ "link-retry", required_argument, NULL, 'l' },
{ "mode", required_argument, NULL, 'm' },
+ { "link-up", required_argument, NULL, 'u' },
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, 'v' },
{ NULL, 0, NULL, 0 }
@@ -505,6 +508,7 @@ static void help(int status)
" -f, --suffix Append the suffix to VLAN interface name\n"
" -l, --link-retry Number of retries for link up\n"
" -m, --mode Link mode, either fabric or vn2vn\n"
+ " -u, --link-up Leave link up after FIP response\n"
" -h, --help Display this help and exit\n"
" -v, --version Display version information and exit\n",
exe);
@@ -551,6 +555,9 @@ static void parse_cmdline(int argc, char **argv)
exit(1);
}
break;
+ case 'u':
+ config.link_up = true;
+ break;
case 'h':
help(0);
break;
@@ -900,11 +907,15 @@ static void cleanup_interfaces(void)
if (config.automode) {
TAILQ_FOREACH(iff, &interfaces, list_node) {
- if (iff->linkup_sent && TAILQ_EMPTY(&iff->vlans)) {
- FIP_LOG_DBG("shutdown if %d",
- iff->ifindex);
- rtnl_set_iff_down(iff->ifindex, NULL);
- iff->linkup_sent = false;
+ if (iff->linkup_sent) {
+ if (config.link_up && iff->resp_recv)
+ continue;
+ if (TAILQ_EMPTY(&iff->vlans)) {
+ FIP_LOG_DBG("shutdown if %d",
+ iff->ifindex);
+ rtnl_set_iff_down(iff->ifindex, NULL);
+ iff->linkup_sent = false;
+ }
}
}
} else {
@@ -914,11 +925,15 @@ static void cleanup_interfaces(void)
skipped++;
continue;
}
- if (iff->linkup_sent && TAILQ_EMPTY(&iff->vlans)) {
- FIP_LOG_DBG("shutdown if %d",
- iff->ifindex);
- rtnl_set_iff_down(iff->ifindex, NULL);
- iff->linkup_sent = false;
+ if (iff->linkup_sent) {
+ if (config.link_up && iff->resp_recv)
+ continue;
+ if (TAILQ_EMPTY(&iff->vlans)) {
+ FIP_LOG_DBG("shutdown if %d",
+ iff->ifindex);
+ rtnl_set_iff_down(iff->ifindex, NULL);
+ iff->linkup_sent = false;
+ }
}
}
}
--
1.8.1.4

View File

@ -1,43 +0,0 @@
From 08d9872fb579c0764115beadf588cc52c9f7d97a Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:10 +0000
Subject: fipvlan: Update manpage to reflect correct timeout
The timeout per loop is 1000ms, not 500ms.
Signed-off-by: Lee Duncan <lduncan@suse.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
doc/fipvlan.8 | 2 +-
doc/fipvlan.txt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/fipvlan.8 b/doc/fipvlan.8
index 927e557..1d2b707 100644
--- a/doc/fipvlan.8
+++ b/doc/fipvlan.8
@@ -83,7 +83,7 @@ to VLAN interface names\&.
.RS 4
Retry check for link up to
\fIcount\fR
-times\&. The link state is checked every 500 ms\&. The default number of retries is 20\&.
+times\&. The link state is checked every 1000 ms\&. The default number of retries is 20\&.
.RE
.PP
\fB\-u\fR, \fB\-\-link\-up\fR
diff --git a/doc/fipvlan.txt b/doc/fipvlan.txt
index cbed16f..5ba0324 100644
--- a/doc/fipvlan.txt
+++ b/doc/fipvlan.txt
@@ -75,7 +75,7 @@ OPTIONS
*-l*, *--link-retry* _count_::
Retry check for link up to _count_ times. The link state is
- checked every 500 ms. The default number of retries is 20.
+ checked every 1000 ms. The default number of retries is 20.
*-u*, *--link-up*::
Leave link up if a FIP response has been received.
--
1.8.1.4

View File

@ -1,41 +0,0 @@
From 86928f2be78cfb80ff61856e1b7189ed88c836c1 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:11 +0000
Subject: fipvlan: Do not shut down FCoE connections on physical interface
When FCoE is started on the physical interface fipvlan will
shutdown the interface upon exit.
References: bnc#814151
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/fipvlan.c b/fipvlan.c
index a865481..3c91930 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -910,6 +910,8 @@ static void cleanup_interfaces(void)
if (iff->linkup_sent) {
if (config.link_up && iff->resp_recv)
continue;
+ if (iff->fcoe_started)
+ continue;
if (TAILQ_EMPTY(&iff->vlans)) {
FIP_LOG_DBG("shutdown if %d",
iff->ifindex);
@@ -928,6 +930,8 @@ static void cleanup_interfaces(void)
if (iff->linkup_sent) {
if (config.link_up && iff->resp_recv)
continue;
+ if (iff->fcoe_started)
+ continue;
if (TAILQ_EMPTY(&iff->vlans)) {
FIP_LOG_DBG("shutdown if %d",
iff->ifindex);
--
1.8.1.4

View File

@ -1,36 +0,0 @@
From 78ea81aaef57b5b40fdc86335a7e6a432a72ad48 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:12 +0000
Subject: fipvlan: break out of receive loop on error
When fip_recv() returns an error we need to break out of the
receive loop; otherwise we might be stuck in there forever.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 3c91930..198f0ee 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -772,8 +772,12 @@ static void recv_loop(int timeout)
rtnl_recv(pfd[0].fd, rtnl_listener_handler, NULL);
/* everything else should be FIP packet sockets */
for (i = 1; i < pfd_len; i++) {
- if (pfd[i].revents & POLLIN)
- fip_recv(pfd[i].fd, fip_vlan_handler, NULL);
+ if (pfd[i].revents & POLLIN) {
+ rc = fip_recv(pfd[i].fd, fip_vlan_handler,
+ NULL);
+ if (rc < 0)
+ break;
+ }
}
}
}
--
1.8.1.4

View File

@ -1,129 +0,0 @@
From 45d0e704e82b1c00d3e45745ac3d466fce4c953c Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:13 +0000
Subject: fipvlan: handle errors from fip socket creation
If we don't receive a SAN MAC address it's pointless to try
to create a socket, as FCoE itself cannot continue. So we
should be handling errors from socket creation and abort
VLAN discovery early.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 19 ++++++++++++-------
lib/fip.c | 20 ++++++++++++++------
2 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 198f0ee..5bedea1 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -790,7 +790,7 @@ static void find_interfaces(int ns)
static int probe_fip_interface(struct iff *iff)
{
- int origdev = 1;
+ int origdev = 1, rc;
if (iff->resp_recv)
return 0;
@@ -812,6 +812,10 @@ static int probe_fip_interface(struct iff *iff)
if (!iff->fip_ready) {
iff->ps = fip_socket(iff->ifindex, FIP_NONE);
+ if (iff->ps < 0) {
+ FIP_LOG_DBG("if %d not ready\n", iff->ifindex);
+ return 0;
+ }
setsockopt(iff->ps, SOL_PACKET, PACKET_ORIGDEV,
&origdev, sizeof(origdev));
pfd_add(iff->ps);
@@ -819,13 +823,14 @@ static int probe_fip_interface(struct iff *iff)
}
if (config.vn2vn)
- fip_send_vlan_request(iff->ps, iff->ifindex, iff->mac_addr,
- FIP_ALL_VN2VN);
+ rc = fip_send_vlan_request(iff->ps, iff->ifindex,
+ iff->mac_addr, FIP_ALL_VN2VN);
else
- fip_send_vlan_request(iff->ps, iff->ifindex, iff->mac_addr,
- FIP_ALL_FCF);
- iff->req_sent = true;
- return 0;
+ rc = fip_send_vlan_request(iff->ps, iff->ifindex,
+ iff->mac_addr, FIP_ALL_FCF);
+ if (rc == 0)
+ iff->req_sent = true;
+ return rc == 0 ? 0 : 1;
}
static int send_vlan_requests(void)
diff --git a/lib/fip.c b/lib/fip.c
index 73bf03e..6657b61 100644
--- a/lib/fip.c
+++ b/lib/fip.c
@@ -95,10 +95,11 @@ static int fip_get_sanmac(int ifindex, unsigned char *addr)
* @mac: MAC address to add or delete
* @multi: false if unicast, true if multicast address
*/
-static void
+static int
fip_socket_add_addr(int s, int ifindex, bool add, const __u8 *mac, bool multi)
{
struct packet_mreq mr;
+ int rc = 0;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifindex;
@@ -107,9 +108,12 @@ fip_socket_add_addr(int s, int ifindex, bool add, const __u8 *mac, bool multi)
memcpy(mr.mr_address, mac, ETHER_ADDR_LEN);
if (setsockopt(s, SOL_PACKET,
add ? PACKET_ADD_MEMBERSHIP : PACKET_DROP_MEMBERSHIP,
- &mr, sizeof(mr)) < 0)
+ &mr, sizeof(mr)) < 0) {
FIP_LOG_DBG("PACKET_%s_MEMBERSHIP:failed\n",
add ? "ADD" : "DROP");
+ rc = -errno;
+ }
+ return rc;
}
/**
@@ -118,16 +122,16 @@ fip_socket_add_addr(int s, int ifindex, bool add, const __u8 *mac, bool multi)
* @ifindex: network interface index to send on
* @add: 1 to add 0 to del
*/
-static void fip_socket_sanmac(int s, int ifindex, int add)
+static int fip_socket_sanmac(int s, int ifindex, int add)
{
unsigned char smac[ETHER_ADDR_LEN];
if (fip_get_sanmac(ifindex, smac)) {
FIP_LOG_DBG("%s: no sanmac, ifindex %d\n", __func__, ifindex);
- return;
+ return -ENXIO;
}
- fip_socket_add_addr(s, ifindex, add, smac, false);
+ return fip_socket_add_addr(s, ifindex, add, smac, false);
}
/**
@@ -210,7 +214,11 @@ int fip_socket(int ifindex, enum fip_multi multi)
if (s < 0)
return s;
- fip_socket_sanmac(s, ifindex, 1);
+ rc = fip_socket_sanmac(s, ifindex, 1);
+ if (rc < 0) {
+ close(s);
+ return rc;
+ }
if (multi != FIP_NONE)
fip_socket_multi(s, ifindex, true, multi);
--
1.8.1.4

View File

@ -1,174 +0,0 @@
From 6bde8d1b9f63a7d110fab53e3791040cbe9b101f Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Tue, 19 Nov 2013 20:26:14 +0000
Subject: fipvlan: filter interfaces from rtnl_getlink
Instead of carrying around two different ways on selecting
interfaces we should be filter the list of possible interfaces
during RTM_GETLINK / RTM_NEWLINK and use only one list.
This safes us from having implement two codepaths for doing
the same thing.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 98 ++++++++++++++++++++++++++++-----------------------------------
1 file changed, 43 insertions(+), 55 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index 5bedea1..1b8492d 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -447,6 +447,19 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
memcpy(iff->mac_addr, RTA_DATA(ifla[IFLA_ADDRESS]), ETHER_ADDR_LEN);
strncpy(iff->ifname, RTA_DATA(ifla[IFLA_IFNAME]), IFNAMSIZ);
+ if (!config.automode) {
+ int i, iff_selected = 0;
+
+ for (i = 0; i < config.namec; i++) {
+ if (!strcmp(iff->ifname, config.namev[i]))
+ iff_selected = 1;
+ }
+ if (!iff_selected) {
+ FIP_LOG_DBG("ignoring if %s\n", iff->ifname);
+ free(iff);
+ return;
+ }
+ }
if (ifla[IFLA_LINKINFO]) {
parse_linkinfo(linkinfo, ifla[IFLA_LINKINFO]);
/* Track VLAN devices separately */
@@ -836,22 +849,10 @@ static int probe_fip_interface(struct iff *iff)
static int send_vlan_requests(void)
{
struct iff *iff;
- int i;
int skipped = 0;
- if (config.automode) {
- TAILQ_FOREACH(iff, &interfaces, list_node) {
- skipped += probe_fip_interface(iff);
- }
- } else {
- for (i = 0; i < config.namec; i++) {
- iff = lookup_iff(0, config.namev[i]);
- if (!iff) {
- skipped++;
- continue;
- }
- skipped += probe_fip_interface(iff);
- }
+ TAILQ_FOREACH(iff, &interfaces, list_node) {
+ skipped += probe_fip_interface(iff);
}
return skipped;
}
@@ -865,7 +866,8 @@ static void do_vlan_discovery(void)
retry:
skipped += send_vlan_requests();
if (skipped && skip_retry_count++ < config.link_retry) {
- FIP_LOG_DBG("waiting for IFF_RUNNING [%d]\n", skip_retry_count);
+ FIP_LOG_DBG("waiting for IFF_RUNNING [%d/%d]\n",
+ skip_retry_count, config.link_retry);
recv_loop(500);
skipped = 0;
retry_count = 0;
@@ -873,6 +875,11 @@ retry:
}
recv_loop(200);
TAILQ_FOREACH(iff, &interfaces, list_node) {
+ if (!iff->fip_ready) {
+ FIP_LOG_DBG("if %d: skipping, FIP not ready\n",
+ iff->ifindex);
+ continue;
+ }
if (!iff->running && iff->linkup_sent) {
FIP_LOG_DBG("if %d: waiting for IFF_RUNNING [%d]\n",
iff->ifindex, retry_count);
@@ -911,47 +918,23 @@ retry:
static void cleanup_interfaces(void)
{
struct iff *iff;
- int i;
- int skipped = 0;
- if (config.automode) {
- TAILQ_FOREACH(iff, &interfaces, list_node) {
- if (iff->linkup_sent) {
- if (config.link_up && iff->resp_recv)
- continue;
- if (iff->fcoe_started)
- continue;
- if (TAILQ_EMPTY(&iff->vlans)) {
- FIP_LOG_DBG("shutdown if %d",
- iff->ifindex);
- rtnl_set_iff_down(iff->ifindex, NULL);
- iff->linkup_sent = false;
- }
- }
- }
- } else {
- for (i = 0; i < config.namec; i++) {
- iff = lookup_iff(0, config.namev[i]);
- if (!iff) {
- skipped++;
+ TAILQ_FOREACH(iff, &interfaces, list_node) {
+ if (iff->linkup_sent) {
+ if (config.link_up && iff->resp_recv)
continue;
- }
- if (iff->linkup_sent) {
- if (config.link_up && iff->resp_recv)
- continue;
- if (iff->fcoe_started)
- continue;
- if (TAILQ_EMPTY(&iff->vlans)) {
- FIP_LOG_DBG("shutdown if %d",
- iff->ifindex);
- rtnl_set_iff_down(iff->ifindex, NULL);
- iff->linkup_sent = false;
- }
+ if (iff->fcoe_started)
+ continue;
+ if (TAILQ_EMPTY(&iff->vlans)) {
+ FIP_LOG_DBG("shutdown if %d",
+ iff->ifindex);
+ rtnl_set_iff_down(iff->ifindex, NULL);
+ iff->linkup_sent = false;
}
}
}
-
}
+
/* this is to not require headers from libcap */
static inline int capget(cap_user_header_t hdrp, cap_user_data_t datap)
{
@@ -1003,13 +986,18 @@ int main(int argc, char **argv)
determine_libfcoe_interface();
find_interfaces(ns);
- while ((TAILQ_EMPTY(&interfaces)) && ++find_cnt < 5) {
- FIP_LOG_DBG("no interfaces found, trying again");
- find_interfaces(ns);
- }
+ if (config.automode)
+ while ((TAILQ_EMPTY(&interfaces)) && ++find_cnt < 5) {
+ FIP_LOG_DBG("no interfaces found, trying again");
+ find_interfaces(ns);
+ }
if (TAILQ_EMPTY(&interfaces)) {
- FIP_LOG_ERR(ENODEV, "no interfaces to perform discovery on");
+ if (config.automode)
+ FIP_LOG_ERR(ENODEV,
+ "no interfaces to perform discovery on");
+ else
+ FIP_LOG("no interfaces to perform discovery on");
exit(1);
}
--
1.8.1.4

View File

@ -1,27 +0,0 @@
From 0e5d536b20ed481d5a057e9bfee772b4c53bdb0f Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:51 +0000
Subject: build: Add missing 'DESTDIR' when installing bash completion
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am
index 5cbc15f..e93aa8f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -67,7 +67,7 @@ init_d_SCRIPTS = etc/initd/fcoe
dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec etc/config
-BASH_COMPLETION_DIR=/etc/bash_completion.d/
+BASH_COMPLETION_DIR=$(DESTDIR)/etc/bash_completion.d/
install-data-hook:
if [ ! -f ${DESTDIR}${fcoe_configdir}/config ] ; then \
--
1.8.1.4

View File

@ -1,46 +0,0 @@
From 9869390ff1a6ecca1e6599e37128a07d237655e6 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:52 +0000
Subject: build: Fix build with '-Wl,--as-needed'
The libraries need to be specified correctly to get '--as-needed'
to work.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
Makefile.am | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index e93aa8f..ba08924 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -9,21 +9,18 @@ AM_CFLAGS = -Wall -Wformat=2 -Werror -Wmissing-prototypes -Wstrict-prototypes
## rules for building fcoeadm
fcoeadm_SOURCES = fcoeadm.c fcoeadm_display.c
-fcoeadm_LDADD = lib/libutil.a libopenfcoe.a
+fcoeadm_LDADD = lib/libutil.a libopenfcoe.a $(HBAAPI_LIBS)
fcoeadm_CFLAGS = $(AM_CFLAGS) $(HBAAPI_CFLAGS)
-fcoeadm_LDFLAGS = $(AM_LDFLAGS) $(HBAAPI_LIBS)
## rules for building fcoemon
fcoemon_SOURCES = fcoemon.c
-fcoemon_LDADD = lib/libutil.a
+fcoemon_LDADD = lib/libutil.a -lrt
fcoemon_CFLAGS = $(AM_CFLAGS) $(DCBD_CFLAGS)
-fcoemon_LDFLAGS = $(AM_LDFLAGS) -lrt
## rules for building fcping
fcping_SOURCES = fcping.c
-fcping_LDADD = lib/libutil.a
+fcping_LDADD = lib/libutil.a $(HBAAPI_LIBS) -lrt
fcping_CFLAGS = $(AM_CFLAGS) $(HBAAPI_CFLAGS)
-fcping_LDFLAGS = $(AM_LDFLAGS) $(HBAAPI_LIBS) -lrt
## rules for building fipvlan
fipvlan_SOURCES = fipvlan.c
--
1.8.1.4

View File

@ -1,81 +0,0 @@
From e566b3ecac367cf59a1d3995b32591bba2ad2972 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:53 +0000
Subject: Fix integer formatting
Properly use inttypes when printing 64bit values.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fcoeadm_display.c | 4 ++--
fcoemon.c | 2 +-
fcping.c | 11 ++++++-----
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/fcoeadm_display.c b/fcoeadm_display.c
index 287e370..9b96aa7 100644
--- a/fcoeadm_display.c
+++ b/fcoeadm_display.c
@@ -1417,8 +1417,8 @@ static void print_fcoe_fcf_device(void *ep, UNUSED void *arg)
if (!buf)
buf = temp;
printf(" Connection Mode: %s\n", buf);
- printf(" Fabric Name: 0x%016lx\n", fcf->fabric_name);
- printf(" Switch Name 0x%016lx\n", fcf->switch_name);
+ printf(" Fabric Name: 0x%016" PRIx64 "\n", fcf->fabric_name);
+ printf(" Switch Name 0x%016" PRIx64 "\n", fcf->switch_name);
mac2str(fcf->mac, mac, MAX_STR_LEN);
printf(" MAC Address: %s\n", mac);
printf(" FCF Priority: %u\n", fcf->priority);
diff --git a/fcoemon.c b/fcoemon.c
index a5babfa..be4c74d 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -2637,7 +2637,7 @@ static void fcm_dcbd_get_oper(struct fcm_netif *ff, char *resp, char *cp)
if (ep) {
FCM_LOG_DEV(ff, "Invalid get oper response "
- "parse error byte %ld, resp %s", ep - cp, cp);
+ "parse error byte %td, resp %s", ep - cp, cp);
fcm_dcbd_state_set(ff, FCD_ERROR);
} else {
if (val && fcoe_config.debug)
diff --git a/fcping.c b/fcping.c
index c6f74a6..399b778 100644
--- a/fcping.c
+++ b/fcping.c
@@ -25,6 +25,7 @@
#include <stddef.h>
#include <stdarg.h>
#include <unistd.h>
+#include <inttypes.h>
#include <errno.h>
#include <string.h>
#include <time.h>
@@ -810,17 +811,17 @@ static void fp_check_data_len(void)
printf("Maximum ECHO data allowed by the Fabric (0x%06x) : %d bytes.\n"
"Maximum ECHO data allowed by the Source (0x%06x) : %d bytes.\n"
"Maximum ECHO data allowed by the Target (0x%06x) : %d bytes.\n"
- "Maximum ECHO data requested from user input (-s) : %lu "
+ "Maximum ECHO data requested from user input (-s) : %" PRIu32 " "
"(default %d) bytes.\n",
FC_WKA_FABRIC_CONTROLLER, flen, sid, slen, fp_did, dlen,
- fp_len - FP_LEN_ECHO, FP_LEN_DEF);
+ (uint32_t)(fp_len - FP_LEN_ECHO), FP_LEN_DEF);
/* fp_len is the total payload, including 4 bytes for ECHO command */
fp_len = MIN(fp_len, plen + FP_LEN_ECHO);
- printf("Actual FC ELS ECHO data size used : %lu bytes.\n"
+ printf("Actual FC ELS ECHO data size used : %" PRIu32 " bytes.\n"
"Actual FC ELS ECHO payload size used : %d bytes "
- "(including %ld bytes ECHO command).\n",
- fp_len - FP_LEN_ECHO, fp_len, FP_LEN_ECHO);
+ "(including %zu bytes ECHO command).\n",
+ (uint32_t)(fp_len - FP_LEN_ECHO), fp_len, FP_LEN_ECHO);
}
/*
--
1.8.1.4

View File

@ -1,29 +0,0 @@
From 6750b2abc6d39867954437fd58e8a593613b9c37 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:54 +0000
Subject: fcnsq: Fixup help text
The help text was missing the '-q' short option.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fcnsq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fcnsq.c b/fcnsq.c
index 7b45a32..2510f1c 100644
--- a/fcnsq.c
+++ b/fcnsq.c
@@ -365,7 +365,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"
);
--
1.8.1.4

View File

@ -1,79 +0,0 @@
From d8deef20a4a427dfa866398047e00cd3e28c0545 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:55 +0000
Subject: fcnsq: Fixup 64bit integer handling
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fcnsq.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/fcnsq.c b/fcnsq.c
index 2510f1c..1597cd5 100644
--- a/fcnsq.c
+++ b/fcnsq.c
@@ -24,6 +24,7 @@
#include <stdarg.h>
#include <stdbool.h>
#include <unistd.h>
+#include <inttypes.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
@@ -228,7 +229,7 @@ static int gpn_id(int bsg, u32 fcid)
rjt = gn_id(bsg, fcid, FC_NS_GPN_ID, &wwpn);
if (rjt)
goto fail;
- print_result("Port Name", "%16.16llx\n", wwpn);
+ print_result("Port Name", "%16.16jx\n", (uintmax_t)wwpn);
return 0;
fail:
if (rjt == (u16) ~0)
@@ -249,7 +250,7 @@ static int gnn_id(int bsg, u32 fcid)
rjt = gn_id(bsg, fcid, FC_NS_GNN_ID, &wwnn);
if (rjt)
goto fail;
- print_result("Node Name", "%16.16llx\n", wwnn);
+ print_result("Node Name", "%16.16jx\n", (uintmax_t)wwnn);
return 0;
fail:
if (rjt == (u16) ~0)
@@ -376,11 +377,12 @@ int main(int argc, char *argv[])
{
char *bsg;
int bsg_dev;
- u32 port_id;
- u64 wwnn;
+ u32 port_id = 0;
+ u64 wwnn = 0;
int rc = 0;
enum commands cmd = 0;
char c;
+ uintmax_t wwnn_tmp = 0;
while(1) {
c = getopt_long_only(argc, argv, "", options, NULL);
@@ -399,13 +401,17 @@ int main(int argc, char *argv[])
if (cmd)
help(-1);
cmd = c;
- sscanf(optarg, "%x", &port_id);
+ if (sscanf(optarg, "%x", &port_id) != 1)
+ help(-1);
break;
case GSNN_NN:
if (cmd)
help(-1);
cmd = c;
- sscanf(optarg, "%llx", &wwnn);
+ if (sscanf(optarg, "%jx", &wwnn_tmp) == 1)
+ wwnn = (u64)wwnn_tmp;
+ else
+ help(-1);
break;
}
}
--
1.8.1.4

View File

@ -1,100 +0,0 @@
From 41e9d79bd4bf9af4aa422615453333e860acabcd Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:56 +0000
Subject: fcoemon: add systemd service file
Add fcoe.service file to start fcoemon from systemd
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
Makefile.am | 5 +++++
configure.ac | 8 ++++++++
doc/fcoemon.8 | 2 +-
doc/fcoemon.txt | 1 +
etc/systemd/fcoe.service | 13 +++++++++++++
5 files changed, 28 insertions(+), 1 deletion(-)
create mode 100644 etc/systemd/fcoe.service
diff --git a/Makefile.am b/Makefile.am
index ba08924..012b560 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -41,6 +41,11 @@ noinst_HEADERS = fcoeadm_display.h fcoe_clif.h fcoemon.h \
fcoe_configdir = ${sysconfdir}/fcoe
dist_fcoe_config_DATA = etc/cfg-ethx
+## install systemd service files
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = etc/systemd/fcoe.service
+endif
+
## man pages for fcoeadm and fcoemon
dist_man_MANS = doc/fcoeadm.8 doc/fcoemon.8 doc/fipvlan.8 doc/fcrls.8 \
doc/fcnsq.8 doc/fcping.8
diff --git a/configure.ac b/configure.ac
index bb1385b..107d039 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,14 @@ AC_SUBST([LLDPAD_CFLAGS])
PKG_CHECK_MODULES([LIBHBALINUX], [libhbalinux >= 1.0.13])
AC_SUBST([LIBHBALINUX_CFLAGS])
+PKG_PROG_PKG_CONFIG
+AC_ARG_WITH([systemdsystemunitdir],
+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
+ [Directory for systemd service files]), [],
+ [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])
+
AC_CONFIG_FILES([Makefile fcoe-utils.spec include/fcoe_utils_version.h])
AC_OUTPUT
diff --git a/doc/fcoemon.8 b/doc/fcoemon.8
index e9a045b..020394e 100644
--- a/doc/fcoemon.8
+++ b/doc/fcoemon.8
@@ -358,7 +358,7 @@ indicates whether a FIP responder should be activated on this device to support
Note that the attached Ethernet peer device (e\&.g\&. FCoE capable switch port) must have compatible settings For DCB and FCoE to function properly\&.
.SS "/etc/init\&.d/fcoe"
.sp
-This is the \fBfcoe\fR system service script\&. This script is invoked by the init process or by the service command to start and stop the \fBfcoemon\fR\&.
+This is the \fBfcoe\fR system service script\&. This script is invoked by the init process or by the service command to start and stop the \fBfcoemon\fR\&. On systemd-enabled systems, \fBfcoemon\fR is controlled via the \fBfcoe.service\fR unit.
.SH "VLAN NAMING CONVENTIONS"
.sp
If a new VLAN device is created (see the description of the \fIAUTO_VLAN\fR setting above), it will have the name \fIdev\fR\&.\fIvlan\fR\-fcoe; where \fIdev\fR is the name of the Ethernet parent device and \fIvlan\fR is the discovered VLAN ID number\&.
diff --git a/doc/fcoemon.txt b/doc/fcoemon.txt
index ec15197..09ee5a2 100644
--- a/doc/fcoemon.txt
+++ b/doc/fcoemon.txt
@@ -214,6 +214,7 @@ must have compatible settings For DCB and FCoE to function properly.
~~~~~~~~~~~~~~~~
This is the *fcoe* system service script. This script is invoked by the
init process or by the service command to start and stop the *fcoemon*.
+On systemd-enabled systems, *fcoemon* is controlled via the *fcoe.service* unit.
VLAN NAMING CONVENTIONS
-----------------------
diff --git a/etc/systemd/fcoe.service b/etc/systemd/fcoe.service
new file mode 100644
index 0000000..4834e43
--- /dev/null
+++ b/etc/systemd/fcoe.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Open-FCoE initiator daemon
+After=syslog.target network.target
+
+[Service]
+Type=forking
+EnvironmentFile=/etc/sysconfig/fcoe
+ExecStartPre=/sbin/modprobe -qa $SUPPORTED_DRIVERS
+ExecStart=/usr/sbin/fcoemon $FCOEMON_OPTS
+
+[Install]
+WantedBy=multi-user.target
+Also=lldpad.socket
--
1.8.1.4

View File

@ -1,131 +0,0 @@
From 09caead4ae14c868cee0ad71f8bb8648746a81a0 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 6 Dec 2013 19:51:57 +0000
Subject: fcoemon: systemd socket activation
Implement systemd socket activation on the CLIF socket.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
Makefile.am | 2 +-
etc/systemd/fcoe.service | 3 ++-
etc/systemd/fcoemon.socket | 6 ++++++
fcoemon.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
4 files changed, 52 insertions(+), 3 deletions(-)
create mode 100644 etc/systemd/fcoemon.socket
diff --git a/Makefile.am b/Makefile.am
index 012b560..e7df6f5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -43,7 +43,7 @@ dist_fcoe_config_DATA = etc/cfg-ethx
## install systemd service files
if HAVE_SYSTEMD
-systemdsystemunit_DATA = etc/systemd/fcoe.service
+systemdsystemunit_DATA = etc/systemd/fcoe.service etc/systemd/fcoemon.socket
endif
## man pages for fcoeadm and fcoemon
diff --git a/etc/systemd/fcoe.service b/etc/systemd/fcoe.service
index 4834e43..5e5c8a2 100644
--- a/etc/systemd/fcoe.service
+++ b/etc/systemd/fcoe.service
@@ -3,7 +3,7 @@ Description=Open-FCoE initiator daemon
After=syslog.target network.target
[Service]
-Type=forking
+Type=simple
EnvironmentFile=/etc/sysconfig/fcoe
ExecStartPre=/sbin/modprobe -qa $SUPPORTED_DRIVERS
ExecStart=/usr/sbin/fcoemon $FCOEMON_OPTS
@@ -11,3 +11,4 @@ ExecStart=/usr/sbin/fcoemon $FCOEMON_OPTS
[Install]
WantedBy=multi-user.target
Also=lldpad.socket
+Also=fcoemon.socket
diff --git a/etc/systemd/fcoemon.socket b/etc/systemd/fcoemon.socket
new file mode 100644
index 0000000..4de8715
--- /dev/null
+++ b/etc/systemd/fcoemon.socket
@@ -0,0 +1,6 @@
+[Socket]
+ListenDatagram=@/com/intel/fcoemon
+PassCredentials=true
+
+[Install]
+WantedBy=sockets.target
diff --git a/fcoemon.c b/fcoemon.c
index be4c74d..5e4f8d7 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -3546,12 +3546,54 @@ err:
sendto(snum, rbuf, MSG_RBUF, 0, (struct sockaddr *)&from, fromlen);
}
+static int fcm_systemd_socket(void)
+{
+ char *env, *ptr;
+ unsigned int p, l;
+
+ env = getenv("LISTEN_PID");
+ if (!env)
+ return -1;
+
+ p = strtoul(env, &ptr, 10);
+ if (ptr && ptr == env) {
+ FCM_LOG_DBG("Invalid value '%s' for LISTEN_PID\n", env);
+ return -1;
+ }
+ if ((pid_t)p != getpid()) {
+ FCM_LOG_DBG("Invalid PID '%d' from LISTEN_PID\n", p);
+ return -1;
+ }
+ env = getenv("LISTEN_FDS");
+ if (!env) {
+ FCM_LOG_DBG("LISTEN_FDS is not set\n");
+ return -1;
+ }
+ l = strtoul(env, &ptr, 10);
+ if (ptr && ptr == env) {
+ FCM_LOG_DBG("Invalid value '%s' for LISTEN_FDS\n", env);
+ return -1;
+ }
+ if (l != 1) {
+ FCM_LOG_DBG("LISTEN_FDS specified %d fds\n", l);
+ return -1;
+ }
+ /* systemd returns fds with an offset of '3' */
+ return 3;
+}
+
static int fcm_srv_create(struct fcm_srv_info *srv_info)
{
socklen_t addrlen;
struct sockaddr_un addr;
int rc = 0;
+ srv_info->srv_sock = fcm_systemd_socket();
+ if (srv_info->srv_sock > 0) {
+ FCM_LOG_DBG("Using systemd socket\n");
+ goto out_done;
+ }
+
srv_info->srv_sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
if (srv_info->srv_sock < 0) {
FCM_LOG_ERR(errno, "Failed to create socket\n");
@@ -3570,7 +3612,7 @@ static int fcm_srv_create(struct fcm_srv_info *srv_info)
rc = errno;
goto err_close;
}
-
+out_done:
sa_select_add_fd(srv_info->srv_sock, fcm_srv_receive,
NULL, NULL, srv_info);
--
1.8.1.4

View File

@ -1,46 +0,0 @@
From fa308a68bda455d7305fc194d716ebc06b6f26c7 Mon Sep 17 00:00:00 2001
From: Robert Love <robert.w.love@intel.com>
Date: Wed, 18 Dec 2013 11:51:35 -0800
Subject: doc: Update QUICKSTART/INSTALL docs for systemd init file install
Update installation instructions so that systemd init files
may be installed.
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
INSTALL | 3 +++
QUICKSTART | 3 +++
2 files changed, 6 insertions(+)
diff --git a/INSTALL b/INSTALL
index 3abdf07..ea8c95e 100644
--- a/INSTALL
+++ b/INSTALL
@@ -19,6 +19,9 @@ DEPENDENCIES
1) Bootstrap, configure, make and make install
# ./bootstrap.sh
+ Either execute the next line for System V init script install
# rpm --eval "%configure" | sh
+ or the following line to install systemd unit scripts
+ # rpm --eval "%configure --with-systemdsystemunitdir=/" | sh
# make
# make install
diff --git a/QUICKSTART b/QUICKSTART
index 6fc82b3..c001bc1 100644
--- a/QUICKSTART
+++ b/QUICKSTART
@@ -201,7 +201,10 @@ PROCESS
2) Bootstrap, configure, make and make install
# cd fcoe-utils
# ./bootstrap.sh
+ Either execute the next line for System V init script install
# rpm --eval "%configure" | sh
+ or the following line to install systemd unit scripts
+ # rpm --eval "%configure --with-systemdsystemunitdir=/" | sh
# make
# make install
--
1.8.1.4

View File

@ -1,34 +0,0 @@
From f90bbd76499b71a62f1e7c4ec68a62008031ee8e Mon Sep 17 00:00:00 2001
From: Eddie Wai <eddie.wai@broadcom.com>
Date: Wed, 5 Mar 2014 14:42:28 +0000
Subject: FIPVLAN: Really break out of the recv_loop upon fip_recv error
This patch adds additional code to break out of the recv_loop's while
loop upon fip_recv error. This completes the fix from
commit 78ea81aaef57b5b40fdc86335a7e6a432a72ad48.
Without this, we have seen cases where the recv_loop gets
stuck looping indefinitely.
Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
fipvlan.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fipvlan.c b/fipvlan.c
index 1b8492d..cc71412 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -792,6 +792,8 @@ static void recv_loop(int timeout)
break;
}
}
+ if (i < pfd_len)
+ break;
}
}
--
1.8.1.4

View File

@ -1,28 +0,0 @@
From 4982e604dab3f350f3a3ca20b3c001f8ee66fdc2 Mon Sep 17 00:00:00 2001
From: Robert Love <robert.w.love@intel.com>
Date: Sat, 25 Jan 2014 03:10:21 +0000
Subject: man: Fix typo in fcoemon documentation
"module" was misspelled "modlue." This patch fixes it.
Signed-off-by: Robert Love <robert.w.love@intel.com>
---
doc/fcoemon.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/fcoemon.txt b/doc/fcoemon.txt
index 09ee5a2..7ccf892 100644
--- a/doc/fcoemon.txt
+++ b/doc/fcoemon.txt
@@ -56,7 +56,7 @@ OPTIONS
*-d*, *--debug*::
Enable debugging messages.
*-l*, *--legacy*::
- Force fcoemon to use the legacy /sys/modlue/libfcoe/parameters/
+ Force fcoemon to use the legacy /sys/module/libfcoe/parameters/
interface. The default is to use the newer /sys/bus/fcoe/ interfaces
if they are available.
*-s*, *--syslog*::
--
1.8.1.4

View File

@ -1,107 +0,0 @@
From 95f4a92799627e791dc68eb49922f169409b5cd8 Mon Sep 17 00:00:00 2001
From: Neerav Parikh <neerav.parikh@intel.com>
Date: Tue, 18 Mar 2014 08:34:18 +0000
Subject: fcoemon: Fix IEEE state machine
fcoemon on adapters that support only IEEE DCBX mode
doesn't enter into a state where it can proceed
doing FIP VLAN discovery or creating an FCoE instance.
This is because the current IEEE state machine is tied
with the CEE based state machine. It relies on some
CEE specific DCB netlink calls viz. getstate() to
proceed; which may not be available on drivers that
only support IEEE specific DCBNL calls.
Hence, this patch aims to separate out the IEEE DCBX
mode specific state machine from the CEE one.
Signed-off-by: Neerav Parikh <neerav.parikh@intel.com>
Tested-by: Jack Morgan<jack.morgan@intel.com>
---
fcoemon.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 48 insertions(+), 6 deletions(-)
diff --git a/fcoemon.c b/fcoemon.c
index 23fc2f6..3ab1a98 100644
--- a/fcoemon.c
+++ b/fcoemon.c
@@ -1357,12 +1357,8 @@ ieee_state_set(struct fcm_netif *ff, enum ieee_state new_state)
getstr(&ieee_states, new_state));
}
- if (new_state == IEEE_GET_STATE) {
- ff->ieee_state = new_state;
+ if (new_state == IEEE_GET_STATE)
clear_ieee_info(ff);
- ieee_get_req(ff);
- return;
- }
ff->ieee_state = new_state;
ff->ieee_resp_pending = 0;
@@ -3035,6 +3031,50 @@ static void fcm_fcoe_action(struct fcoe_port *p)
/*
* Called for all ports. For FCoE ports and candidates,
+ * get IEEE DCBX information and set the next action.
+ */
+static void fcm_netif_ieee_advance(struct fcm_netif *ff)
+{
+ enum fcp_action action;
+
+ ASSERT(ff);
+ ASSERT(fcm_clif);
+
+ if (fcm_clif->cl_busy)
+ return;
+
+ if (ff->ieee_resp_pending)
+ return;
+
+ switch (ff->ieee_state) {
+ case IEEE_INIT:
+ break;
+ case IEEE_GET_STATE:
+ ieee_get_req(ff);
+ break;
+ case IEEE_DONE:
+ action = validate_ieee_info(ff);
+ switch (action) {
+ case FCP_DESTROY_IF:
+ case FCP_ENABLE_IF:
+ case FCP_ACTIVATE_IF:
+ fcp_action_set(ff->ifname, action);
+ break;
+ case FCP_DISABLE_IF:
+ case FCP_ERROR:
+ fcp_action_set(ff->ifname, FCP_DISABLE_IF);
+ break;
+ case FCP_WAIT:
+ default:
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+/*
+ * Called for all ports. For FCoE ports and candidates,
* get information and send to dcbd.
*/
static void fcm_netif_advance(struct fcm_netif *ff)
@@ -3161,8 +3201,10 @@ static void fcm_handle_changes(void)
/*
* Perform pending actions (dcbd queries) on network interfaces.
*/
- TAILQ_FOREACH(ff, &fcm_netif_head, ff_list)
+ TAILQ_FOREACH(ff, &fcm_netif_head, ff_list) {
fcm_netif_advance(ff);
+ fcm_netif_ieee_advance(ff);
+ }
/*
* Perform actions on FCoE ports
--
1.7.12.4

View File

@ -1,58 +0,0 @@
From 0d006642c34e360fb7d3c3adbbb1295e784c03bf Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Mon, 12 May 2014 14:55:50 +0200
Subject: fipvlan: Fix crash in create_and_start_vlan()
create_and_start_vlan() will issue a netlink command to create
a new VLAN device. As this device isn't present yet we need
to exit here and retry the vlan configuration once we get the
appropriate message from netlink.
References: bnc#877275
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
fipvlan.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/fipvlan.c b/fipvlan.c
index cc71412..7202f03 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -626,20 +626,21 @@ create_and_start_vlan(struct fcf *fcf, bool vn2vn)
vlan = real_dev;
} else {
vlan = lookup_vlan(fcf->ifindex, fcf->vlan);
- if (vlan) {
- FIP_LOG_DBG("VLAN %s.%d already exists as %s\n",
- real_dev->ifname, fcf->vlan, vlan->ifname);
+ if (!vlan) {
+ snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
+ real_dev->ifname, fcf->vlan, config.suffix);
+ rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
+ if (rc < 0) {
+ printf("Failed to create VLAN device %s\n"
+ "\t%s\n",
+ vlan_name, strerror(-rc));
+ return rc;
+ }
+ printf("Created VLAN device %s\n", vlan_name);
return 0;
}
- snprintf(vlan_name, IFNAMSIZ, "%s.%d%s",
- real_dev->ifname, fcf->vlan, config.suffix);
- rc = vlan_create(fcf->ifindex, fcf->vlan, vlan_name);
- if (rc < 0) {
- printf("Failed to create VLAN device %s\n\t%s\n",
- vlan_name, strerror(-rc));
- return rc;
- }
- printf("Created VLAN device %s\n", vlan_name);
+ FIP_LOG_DBG("VLAN %s.%d already exists as %s\n",
+ real_dev->ifname, fcf->vlan, vlan->ifname);
}
if (!config.start)
return rc;
--
1.7.12.4

View File

@ -1,31 +0,0 @@
From 798a5ff4a205fa26d37447ff77fc27861103440a Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Mon, 12 May 2014 14:59:13 +0200
Subject: fipvlan: suppress warning 'interface already exists'
When fipvlan is called for just the parent interface we should
not select the vlan interface, too, otherwise we'll be getting
those annoying warning messages.
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
fipvlan.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fipvlan.c b/fipvlan.c
index 7202f03..163d21e 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -451,7 +451,8 @@ static void rtnl_recv_newlink(struct nlmsghdr *nh)
int i, iff_selected = 0;
for (i = 0; i < config.namec; i++) {
- if (!strcmp(iff->ifname, config.namev[i]))
+ if (!strncmp(iff->ifname, config.namev[i],
+ strlen(config.namev[i])))
iff_selected = 1;
}
if (!iff_selected) {
--
1.7.12.4

View File

@ -1,31 +0,0 @@
From eb7451d0dcffb1c247e2b070b6101c2c878faee4 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Mon, 12 May 2014 15:24:48 +0200
Subject: fipvlan: do not crash on empty MAC address in lookup_fcf()
We're calling lookup_fcf() with a NULL macaddress, so we need
to ensure we don't crash here.
References: bnc#877275
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
fipvlan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fipvlan.c b/fipvlan.c
index 163d21e..c5f3d3f 100644
--- a/fipvlan.c
+++ b/fipvlan.c
@@ -169,7 +169,7 @@ static struct fcf *lookup_fcf(struct fcf_list_head *head, int ifindex,
TAILQ_FOREACH(fcf, head, list_node)
if ((ifindex == fcf->ifindex) && (vlan == fcf->vlan) &&
- (memcmp(mac, fcf->mac_addr, ETHER_ADDR_LEN) == 0))
+ (!mac || memcmp(mac, fcf->mac_addr, ETHER_ADDR_LEN) == 0))
return fcf;
return NULL;
}
--
1.7.12.4

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d13fe5d755258109812751aa8788087d33a5cc54f4f43a50b93664dad38968af
size 120340

3
fcoe-utils-1.0.30.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a525e256f02f4cb95ff231b7e239d2ff21bcbde4c659fa12cea61e5a53464567
size 121480

View File

@ -1,3 +1,49 @@
-------------------------------------------------------------------
Mon Aug 3 12:35:16 CEST 2015 - hare@suse.de
- Update to version 1.0.30 (FATE#318849)
* Remove merged patches:
+ 0001-man-Fix-small-typo-regarding-fcf-option.patch
+ 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch
+ 0003-fipvlan-fails-on-powerpc.patch
+ 0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch
+ 0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch
+ 0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch
+ 0007-fipvlan-create-VLANs-from-netlink-handler.patch
+ 0008-fipvlan-Start-FCoE-from-netlink-handler.patch
+ 0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch
+ 0010-fipvlan-Re-send-VLAN-discovery.patch
+ 0011-fipvlan-update-manpage.patch
+ 0012-fipvlan-Leave-link-up-if-requested.patch
+ 0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch
+ 0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch
+ 0015-fipvlan-break-out-of-receive-loop-on-error.patch
+ 0016-fipvlan-handle-errors-from-fip-socket-creation.patch
+ 0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch
+ 0018-Add-missing-DESTDIR-when-installing-bash-completion.patch
+ 0019-Fix-build-with-Wl-as-needed.patch
+ 0020-Fix-integer-formatting.patch
+ 0021-fcnsq-Fixup-help-text.patch
+ 0022-fcnsq-Fixup-64bit-integer-handling.patch
+ 0023-fcoemon-add-systemd-service-file.patch
+ 0024-fcoemon-systemd-socket-activation.patch
+ 0025-doc-Update-QUICKSTART-INSTALL-docs-for-systemd-init-.patch
+ 0026-FIPVLAN-Really-break-out-of-the-recv_loop-upon-fip_r.patch
+ 0027-man-Fix-typo-in-fcoemon-documentation.patch
+ 0032-fipvlan-Fix-crash-in-create_and_start_vlan.patch
+ 0033-fipvlan-suppress-warning-interface-already-exists.patch
+ 0034-fipvlan-do-not-crash-on-empty-MAC-address-in-lookup_.patch
* Add new patches from upstream:
+ 0001-fcoemon-Rework-daemonizing-and-error-handling.patch
* Rename patches:
+ 0002-fcoemon-fix-IEEE-state-machine.patch
+ 0003-systemctl-cannot-start-fcoemon.socket.patch
+ 0004-fcoemon-Correctly-handle-options-in-the-service-file.patch
+ 0005-fcoe.service-Add-foreground-to-prevent-fcoemon-to-be.patch
+ 0006-fipvlan-fixup-return-value-on-error.patch
+ 0007-fipvlan-clean-up-state-machine-for-pfd_add.patch
+ 0008-Use-correct-socket-for-fcoemon.socket.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Mon Jul 28 11:28:12 CEST 2014 - hare@suse.de Mon Jul 28 11:28:12 CEST 2014 - hare@suse.de

View File

@ -1,7 +1,7 @@
# #
# spec file for package fcoe-utils # spec file for package fcoe-utils
# #
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -20,8 +20,8 @@ Name: fcoe-utils
Url: http://www.open-fcoe.org Url: http://www.open-fcoe.org
BuildRequires: autoconf BuildRequires: autoconf
BuildRequires: automake BuildRequires: automake
BuildRequires: libHBAAPI2-devel BuildRequires: libHBAAPI2-devel >= 2.2.10
BuildRequires: libhbalinux2-devel BuildRequires: libhbalinux2-devel >= 1.0.17
BuildRequires: libtool BuildRequires: libtool
BuildRequires: open-lldp-devel BuildRequires: open-lldp-devel
BuildRequires: systemd-devel BuildRequires: systemd-devel
@ -30,7 +30,7 @@ Requires: iproute
Requires: libhbalinux2 Requires: libhbalinux2
Requires: open-lldp Requires: open-lldp
%systemd_requires %systemd_requires
Version: 1.0.29 Version: 1.0.30
Release: 0 Release: 0
Summary: FCoE userspace management tools Summary: FCoE userspace management tools
License: GPL-2.0 License: GPL-2.0
@ -38,45 +38,16 @@ Group: System/Daemons
# git://open-fcoe.org/fcoe/fcoe-utils.git # git://open-fcoe.org/fcoe/fcoe-utils.git
Source0: %{name}-%{version}.tar.xz Source0: %{name}-%{version}.tar.xz
# Patches from git repository # Patches from git repository
Patch1: 0001-man-Fix-small-typo-regarding-fcf-option.patch Patch1: 0001-fcoemon-Rework-daemonizing-and-error-handling.patch
Patch2: 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch Patch2: 0002-fcoemon-fix-IEEE-state-machine.patch
Patch3: 0003-fipvlan-fails-on-powerpc.patch
Patch4: 0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch
Patch5: 0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch
Patch6: 0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch
Patch7: 0007-fipvlan-create-VLANs-from-netlink-handler.patch
Patch8: 0008-fipvlan-Start-FCoE-from-netlink-handler.patch
Patch9: 0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch
Patch10: 0010-fipvlan-Re-send-VLAN-discovery.patch
Patch11: 0011-fipvlan-update-manpage.patch
Patch12: 0012-fipvlan-Leave-link-up-if-requested.patch
Patch13: 0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch
Patch14: 0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch
Patch15: 0015-fipvlan-break-out-of-receive-loop-on-error.patch
Patch16: 0016-fipvlan-handle-errors-from-fip-socket-creation.patch
Patch17: 0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch
Patch18: 0018-Add-missing-DESTDIR-when-installing-bash-completion.patch
Patch19: 0019-Fix-build-with-Wl-as-needed.patch
Patch20: 0020-Fix-integer-formatting.patch
Patch21: 0021-fcnsq-Fixup-help-text.patch
Patch22: 0022-fcnsq-Fixup-64bit-integer-handling.patch
Patch23: 0023-fcoemon-add-systemd-service-file.patch
Patch24: 0024-fcoemon-systemd-socket-activation.patch
Patch25: 0025-doc-Update-QUICKSTART-INSTALL-docs-for-systemd-init-.patch
Patch26: 0026-FIPVLAN-Really-break-out-of-the-recv_loop-upon-fip_r.patch
Patch27: 0027-man-Fix-typo-in-fcoemon-documentation.patch
# Patches to be upstreamed # Patches to be upstreamed
Patch28: 0028-systemctl-cannot-start-fcoemon.socket.patch Patch3: 0003-systemctl-cannot-start-fcoemon.socket.patch
Patch29: 0029-fcoemon-Correctly-handle-options-in-the-service-file.patch Patch4: 0004-fcoemon-Correctly-handle-options-in-the-service-file.patch
Patch30: 0030-fcoe.service-Add-foreground-to-prevent-fcoemon-to-be.patch Patch5: 0005-fcoe.service-Add-foreground-to-prevent-fcoemon-to-be.patch
Patch31: 0031-fcoemon-Fix-IEEE-state-machine.patch Patch6: 0006-fipvlan-fixup-return-value-on-error.patch
Patch32: 0032-fipvlan-Fix-crash-in-create_and_start_vlan.patch Patch7: 0007-fipvlan-clean-up-state-machine-for-pfd_add.patch
Patch33: 0033-fipvlan-suppress-warning-interface-already-exists.patch Patch8: 0008-Use-correct-socket-for-fcoemon.socket.patch
Patch34: 0034-fipvlan-do-not-crash-on-empty-MAC-address-in-lookup_.patch
Patch35: 0035-fipvlan-fixup-return-value-on-error.patch
Patch36: 0036-fipvlan-clean-up-state-machine-for-pfd_add.patch
Patch37: 0037-Use-correct-socket-for-fcoemon.socket.patch
# Patches from Fedora # Patches from Fedora
Patch101: fcoe-utils-1.0.29-make.patch Patch101: fcoe-utils-1.0.29-make.patch
@ -97,35 +68,6 @@ connections.
%patch6 -p1 %patch6 -p1
%patch7 -p1 %patch7 -p1
%patch8 -p1 %patch8 -p1
%patch9 -p1
%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
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch101 -p1 %patch101 -p1
%build %build