- 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:
parent
636b4bf7b0
commit
5ac0391a2f
78
0001-fcoemon-Rework-daemonizing-and-error-handling.patch
Normal file
78
0001-fcoemon-Rework-daemonizing-and-error-handling.patch
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
83
0002-fcoemon-fix-IEEE-state-machine.patch
Normal file
83
0002-fcoemon-fix-IEEE-state-machine.patch
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
3
fcoe-utils-1.0.30.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a525e256f02f4cb95ff231b7e239d2ff21bcbde4c659fa12cea61e5a53464567
|
||||||
|
size 121480
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user