From 726eac0e10187b4f264d931919dd385407f3fc8d335ca1e872263b35723ec3c9 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 6 Dec 2013 08:32:04 +0000 Subject: [PATCH 1/4] - Include fipvlan update from upstream/SLES11 SP3 - Small fixes from upstream OBS-URL: https://build.opensuse.org/package/show/network:fcoe/fcoe-utils?expand=0&rev=7 --- ...-Fix-small-typo-regarding-fcf-option.patch | 95 ++++++++++ 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch | 29 +++ 0003-fipvlan-fails-on-powerpc.patch | 52 ++++++ ...tdown-interfaces-if-no-vlans-are-cre.patch | 46 +++++ ...-VLAN-interface-from-netlink-handler.patch | 53 ++++++ ...create_missing_vlan-function-from-lo.patch | 110 +++++++++++ ...an-create-VLANs-from-netlink-handler.patch | 143 ++++++++++++++ ...vlan-Start-FCoE-from-netlink-handler.patch | 154 ++++++++++++++++ ...n-Update-wait-loop-to-wait-for-VLANs.patch | 73 ++++++++ 0010-fipvlan-Re-send-VLAN-discovery.patch | 34 ++++ 0011-fipvlan-update-manpage.patch | 61 ++++++ 0012-fipvlan-Leave-link-up-if-requested.patch | 171 +++++++++++++++++ ...e-manpage-to-reflect-correct-timeout.patch | 43 +++++ ...hut-down-FCoE-connections-on-physica.patch | 42 +++++ ...n-break-out-of-receive-loop-on-error.patch | 36 ++++ ...ndle-errors-from-fip-socket-creation.patch | 129 +++++++++++++ ...-filter-interfaces-from-rtnl_getlink.patch | 174 ++++++++++++++++++ fcoe-utils.changes | 6 + fcoe-utils.spec | 46 ++++- 19 files changed, 1492 insertions(+), 5 deletions(-) create mode 100644 0001-man-Fix-small-typo-regarding-fcf-option.patch create mode 100644 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch create mode 100644 0003-fipvlan-fails-on-powerpc.patch create mode 100644 0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch create mode 100644 0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch create mode 100644 0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch create mode 100644 0007-fipvlan-create-VLANs-from-netlink-handler.patch create mode 100644 0008-fipvlan-Start-FCoE-from-netlink-handler.patch create mode 100644 0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch create mode 100644 0010-fipvlan-Re-send-VLAN-discovery.patch create mode 100644 0011-fipvlan-update-manpage.patch create mode 100644 0012-fipvlan-Leave-link-up-if-requested.patch create mode 100644 0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch create mode 100644 0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch create mode 100644 0015-fipvlan-break-out-of-receive-loop-on-error.patch create mode 100644 0016-fipvlan-handle-errors-from-fip-socket-creation.patch create mode 100644 0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch diff --git a/0001-man-Fix-small-typo-regarding-fcf-option.patch b/0001-man-Fix-small-typo-regarding-fcf-option.patch new file mode 100644 index 0000000..07ffab2 --- /dev/null +++ b/0001-man-Fix-small-typo-regarding-fcf-option.patch @@ -0,0 +1,95 @@ +From fd085bc2188785859b9ab1f6d27d0fe061baf88c Mon Sep 17 00:00:00 2001 +From: Robert Love +Date: Tue, 15 Oct 2013 01:48:18 +0000 +Subject: [PATCH 01/17] 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 +Signed-off-by: Robert Love +--- + 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 +-.\" Date: 11/08/2012 ++.\" Generator: DocBook XSL Stylesheets v1.78.1 ++.\" 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 + diff --git a/0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch b/0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch new file mode 100644 index 0000000..9aaeeb0 --- /dev/null +++ b/0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch @@ -0,0 +1,29 @@ +From 0f63a3ed3a12b4f88f5dd49983cdf3f9b24e9fc8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20=C5=A0abata?= +Date: Thu, 7 Nov 2013 11:31:11 +0000 +Subject: [PATCH 02/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0003-fipvlan-fails-on-powerpc.patch b/0003-fipvlan-fails-on-powerpc.patch new file mode 100644 index 0000000..91cea1c --- /dev/null +++ b/0003-fipvlan-fails-on-powerpc.patch @@ -0,0 +1,52 @@ +From 921a055f5ea6b68f16db585e985eb24b4c32be2c Mon Sep 17 00:00:00 2001 +From: Raju Chakraborty +Date: Mon, 18 Nov 2013 14:33:13 +0000 +Subject: [PATCH 03/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch b/0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch new file mode 100644 index 0000000..66114b4 --- /dev/null +++ b/0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch @@ -0,0 +1,46 @@ +From 29d172232050386b456da62bf873278bb90d4676 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:01 +0000 +Subject: [PATCH 04/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch b/0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch new file mode 100644 index 0000000..a67eed7 --- /dev/null +++ b/0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch @@ -0,0 +1,53 @@ +From ef209fd4f68fb90f85f89612ebbf9c3e8843f33c Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:02 +0000 +Subject: [PATCH 05/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch b/0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch new file mode 100644 index 0000000..9cf8f67 --- /dev/null +++ b/0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch @@ -0,0 +1,110 @@ +From 6ce709fd271ace5a549a43f11343638273684916 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:03 +0000 +Subject: [PATCH 06/17] fipvlan: Extract create_missing_vlan function from loop + +No functional change. + +Signed-off-by: Hannes Reinecke +Signed-off-by: Robert Love +--- + 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 + diff --git a/0007-fipvlan-create-VLANs-from-netlink-handler.patch b/0007-fipvlan-create-VLANs-from-netlink-handler.patch new file mode 100644 index 0000000..65f1370 --- /dev/null +++ b/0007-fipvlan-create-VLANs-from-netlink-handler.patch @@ -0,0 +1,143 @@ +From ac1fc202b5efda33df3445c2a60709264a0032e5 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:04 +0000 +Subject: [PATCH 07/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0008-fipvlan-Start-FCoE-from-netlink-handler.patch b/0008-fipvlan-Start-FCoE-from-netlink-handler.patch new file mode 100644 index 0000000..eaf5339 --- /dev/null +++ b/0008-fipvlan-Start-FCoE-from-netlink-handler.patch @@ -0,0 +1,154 @@ +From 16e421a30caae0e2968941c7bde48f512d9ec106 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:05 +0000 +Subject: [PATCH 08/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch b/0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch new file mode 100644 index 0000000..de853b9 --- /dev/null +++ b/0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch @@ -0,0 +1,73 @@ +From 9f5e376f3cf16bdd83d731fdc02a877e78a75c26 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:06 +0000 +Subject: [PATCH 09/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0010-fipvlan-Re-send-VLAN-discovery.patch b/0010-fipvlan-Re-send-VLAN-discovery.patch new file mode 100644 index 0000000..b4e1160 --- /dev/null +++ b/0010-fipvlan-Re-send-VLAN-discovery.patch @@ -0,0 +1,34 @@ +From 3ded1660f3e2eb79e4dd8155996b0802b6ee664b Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:07 +0000 +Subject: [PATCH 10/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0011-fipvlan-update-manpage.patch b/0011-fipvlan-update-manpage.patch new file mode 100644 index 0000000..d9f9b94 --- /dev/null +++ b/0011-fipvlan-update-manpage.patch @@ -0,0 +1,61 @@ +From 9ade5c67217915aaf38a9e239503d3c982ab6300 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:08 +0000 +Subject: [PATCH 11/17] fipvlan: update manpage + +'-d' was missing on one instance. + +Signed-off-by: Hannes Reinecke +Signed-off-by: Robert Love +--- + 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 +-.\" Date: 03/18/2013 ++.\" Generator: DocBook XSL Stylesheets v1.78.1 ++.\" 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 + diff --git a/0012-fipvlan-Leave-link-up-if-requested.patch b/0012-fipvlan-Leave-link-up-if-requested.patch new file mode 100644 index 0000000..83ee096 --- /dev/null +++ b/0012-fipvlan-Leave-link-up-if-requested.patch @@ -0,0 +1,171 @@ +From 0559d7dd7f3e1fff5a76d45bf4c0ca5944640af6 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:09 +0000 +Subject: [PATCH 12/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch b/0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch new file mode 100644 index 0000000..96497a5 --- /dev/null +++ b/0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch @@ -0,0 +1,43 @@ +From 08d9872fb579c0764115beadf588cc52c9f7d97a Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:10 +0000 +Subject: [PATCH 13/17] fipvlan: Update manpage to reflect correct timeout + +The timeout per loop is 1000ms, not 500ms. + +Signed-off-by: Lee Duncan +Signed-off-by: Robert Love +--- + 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 + diff --git a/0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch b/0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch new file mode 100644 index 0000000..e57db19 --- /dev/null +++ b/0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch @@ -0,0 +1,42 @@ +From 86928f2be78cfb80ff61856e1b7189ed88c836c1 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:11 +0000 +Subject: [PATCH 14/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0015-fipvlan-break-out-of-receive-loop-on-error.patch b/0015-fipvlan-break-out-of-receive-loop-on-error.patch new file mode 100644 index 0000000..29b01b9 --- /dev/null +++ b/0015-fipvlan-break-out-of-receive-loop-on-error.patch @@ -0,0 +1,36 @@ +From 78ea81aaef57b5b40fdc86335a7e6a432a72ad48 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:12 +0000 +Subject: [PATCH 15/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0016-fipvlan-handle-errors-from-fip-socket-creation.patch b/0016-fipvlan-handle-errors-from-fip-socket-creation.patch new file mode 100644 index 0000000..c4bb3d0 --- /dev/null +++ b/0016-fipvlan-handle-errors-from-fip-socket-creation.patch @@ -0,0 +1,129 @@ +From 45d0e704e82b1c00d3e45745ac3d466fce4c953c Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:13 +0000 +Subject: [PATCH 16/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch b/0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch new file mode 100644 index 0000000..a5cb223 --- /dev/null +++ b/0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch @@ -0,0 +1,174 @@ +From 6bde8d1b9f63a7d110fab53e3791040cbe9b101f Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Tue, 19 Nov 2013 20:26:14 +0000 +Subject: [PATCH 17/17] 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 +Signed-off-by: Robert Love +--- + 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 + diff --git a/fcoe-utils.changes b/fcoe-utils.changes index b3f5790..fca9dff 100644 --- a/fcoe-utils.changes +++ b/fcoe-utils.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Fri Dec 6 09:11:57 CET 2013 - hare@suse.de + +- Include fipvlan update from upstream/SLES11 SP3 +- Small fixes from upstream + ------------------------------------------------------------------- Thu Oct 10 15:22:26 UTC 2013 - tchvatal@suse.com diff --git a/fcoe-utils.spec b/fcoe-utils.spec index e07870f..7b1a656 100644 --- a/fcoe-utils.spec +++ b/fcoe-utils.spec @@ -39,13 +39,32 @@ Source1: fcoe.service Source2: fcoe.config Source20: mkinitrd-boot.sh Source22: mkinitrd-setup.sh +# Patches from git repository +Patch1: 0001-man-Fix-small-typo-regarding-fcf-option.patch +Patch2: 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.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 + # Patches from Fedora -Patch1: fcoe-utils-1.0.29-make.patch -Patch2: fcoe-utils-1.0.18-help.patch -Patch3: fcoe-utils-1.0.28-format-strings.patch -Patch4: fcoe-utils-1.0.28-systemd-doc.patch +Patch101: fcoe-utils-1.0.29-make.patch +Patch102: fcoe-utils-1.0.18-help.patch +Patch103: fcoe-utils-1.0.28-format-strings.patch +Patch104: fcoe-utils-1.0.28-systemd-doc.patch # PATCH-FIX-UPSTREAM: fcoe-utils-1.0.29-as-needed.patch -Patch5: fcoe-utils-1.0.29-as-needed.patch +Patch105: fcoe-utils-1.0.29-as-needed.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -60,6 +79,23 @@ connections. %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 +%patch104 -p1 +%patch105 -p1 %build autoreconf -vi From 8a72ca35d6048b0f5620aa79c9c8b822d63cf97588386a43cc5ebbb34b4fe8c0 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 6 Dec 2013 09:18:27 +0000 Subject: [PATCH 2/4] - Mark bash completion as %config OBS-URL: https://build.opensuse.org/package/show/network:fcoe/fcoe-utils?expand=0&rev=8 --- fcoe-utils.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fcoe-utils.spec b/fcoe-utils.spec index 7b1a656..bb84a66 100644 --- a/fcoe-utils.spec +++ b/fcoe-utils.spec @@ -157,7 +157,7 @@ exit 0 %{_sysconfdir}/fcoe/ %config(noreplace) %{_sysconfdir}/fcoe/config %config(noreplace) %{_sysconfdir}/fcoe/cfg-ethx -%{_sysconfdir}/bash_completion.d/ +%config %{_sysconfdir}/bash_completion.d/ /var/adm/fillup-templates/sysconfig.fcoe %{_libexecdir}/fcoe/ /lib/mkinitrd From 38a2ba7ad783d317e74b2676522923105006031b305c453e8d81410fd0f93df0 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 6 Dec 2013 11:55:35 +0000 Subject: [PATCH 3/4] - Add systemd integration - Reshuffle patches for upstream integration - Remove old patches OBS-URL: https://build.opensuse.org/package/show/network:fcoe/fcoe-utils?expand=0&rev=9 --- ...TDIR-when-installing-bash-completion.patch | 26 ++++ ... => 0019-Fix-build-with-Wl-as-needed.patch | 25 +++- ...patch => 0020-Fix-integer-formatting.patch | 84 ++++------- 0021-fcnsq-Fixup-help-text.patch | 28 ++++ 0022-fcnsq-Fixup-64bit-integer-handling.patch | 78 +++++++++++ 0023-fcoemon-add-systemd-service-file.patch | 99 +++++++++++++ 0024-fcoemon-systemd-socket-activation.patch | 130 ++++++++++++++++++ fcoe-utils-1.0.18-help.patch | 13 -- fcoe-utils-1.0.28-systemd-doc.patch | 25 ---- fcoe-utils-1.0.29-make.patch | 9 -- fcoe-utils.changes | 7 + fcoe-utils.spec | 31 +++-- fcoe.service | 12 -- 13 files changed, 430 insertions(+), 137 deletions(-) create mode 100644 0018-Add-missing-DESTDIR-when-installing-bash-completion.patch rename fcoe-utils-1.0.29-as-needed.patch => 0019-Fix-build-with-Wl-as-needed.patch (56%) rename fcoe-utils-1.0.28-format-strings.patch => 0020-Fix-integer-formatting.patch (58%) create mode 100644 0021-fcnsq-Fixup-help-text.patch create mode 100644 0022-fcnsq-Fixup-64bit-integer-handling.patch create mode 100644 0023-fcoemon-add-systemd-service-file.patch create mode 100644 0024-fcoemon-systemd-socket-activation.patch delete mode 100644 fcoe-utils-1.0.18-help.patch delete mode 100644 fcoe-utils-1.0.28-systemd-doc.patch delete mode 100644 fcoe.service diff --git a/0018-Add-missing-DESTDIR-when-installing-bash-completion.patch b/0018-Add-missing-DESTDIR-when-installing-bash-completion.patch new file mode 100644 index 0000000..8e8a614 --- /dev/null +++ b/0018-Add-missing-DESTDIR-when-installing-bash-completion.patch @@ -0,0 +1,26 @@ +From 51cfb504c434a8a0a1df9fa7c3cd9000c4e53d92 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 11:08:23 +0100 +Subject: Add missing 'DESTDIR' when installing bash completion + +Signed-off-by: Hannes Reinecke +--- + 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 + diff --git a/fcoe-utils-1.0.29-as-needed.patch b/0019-Fix-build-with-Wl-as-needed.patch similarity index 56% rename from fcoe-utils-1.0.29-as-needed.patch rename to 0019-Fix-build-with-Wl-as-needed.patch index 4aa56ad..9ae6478 100644 --- a/fcoe-utils-1.0.29-as-needed.patch +++ b/0019-Fix-build-with-Wl-as-needed.patch @@ -1,7 +1,21 @@ -diff -urN fcoe-utils-1.0.29.old/Makefile.am fcoe-utils-1.0.29/Makefile.am ---- fcoe-utils-1.0.29.old/Makefile.am 2013-10-10 17:20:17.341411557 +0200 -+++ fcoe-utils-1.0.29/Makefile.am 2013-10-10 17:20:58.284411552 +0200 -@@ -9,21 +9,18 @@ +From a76be731a5e5262abf0c8deadf8f4f541559b9f8 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 11:23:34 +0100 +Subject: Fix build with '-Wl,--as-needed' + +The libraries need to be specified correctly to get '--as-needed' +to work. + +Signed-off-by: Hannes Reinecke +--- + 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 @@ -26,3 +40,6 @@ diff -urN fcoe-utils-1.0.29.old/Makefile.am fcoe-utils-1.0.29/Makefile.am ## rules for building fipvlan fipvlan_SOURCES = fipvlan.c +-- +1.8.1.4 + diff --git a/fcoe-utils-1.0.28-format-strings.patch b/0020-Fix-integer-formatting.patch similarity index 58% rename from fcoe-utils-1.0.28-format-strings.patch rename to 0020-Fix-integer-formatting.patch index 2b5a2ad..bf0f8e0 100644 --- a/fcoe-utils-1.0.28-format-strings.patch +++ b/0020-Fix-integer-formatting.patch @@ -1,63 +1,22 @@ -diff --git a/fcnsq.c b/fcnsq.c -index 45dff40..c5b78b9 100644 ---- a/fcnsq.c -+++ b/fcnsq.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -227,7 +228,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) -@@ -248,7 +249,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) -@@ -373,11 +374,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); -@@ -402,7 +404,8 @@ int main(int argc, char *argv[]) - if (cmd) - help(-1); - cmd = c; -- sscanf(optarg, "%llx", &wwnn); -+ sscanf(optarg, "%jx", &wwnn_tmp); -+ wwnn = (u64)wwnn_tmp; - break; - } - } +From d61a3d41a935a389c3cf6d4040905a4e296095c5 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 11:54:49 +0100 +Subject: Fix integer formatting + +Properly use inttypes when printing 64bit values. + +Signed-off-by: Hannes Reinecke +--- + 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 e1cbd48..a6cf7a3 100644 +index 287e370..9b96aa7 100644 --- a/fcoeadm_display.c +++ b/fcoeadm_display.c -@@ -1426,8 +1426,8 @@ void print_fcoe_fcf_device(void *ep, void *arg) +@@ -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); @@ -69,10 +28,10 @@ index e1cbd48..a6cf7a3 100644 printf(" MAC Address: %s\n", mac); printf(" FCF Priority: %u\n", fcf->priority); diff --git a/fcoemon.c b/fcoemon.c -index 80360fd..23fae9e 100644 +index a5babfa..be4c74d 100644 --- a/fcoemon.c +++ b/fcoemon.c -@@ -2640,7 +2640,7 @@ static void fcm_dcbd_get_oper(struct fcm_netif *ff, char *resp, char *cp) +@@ -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 " @@ -82,7 +41,7 @@ index 80360fd..23fae9e 100644 } else { if (val && fcoe_config.debug) diff --git a/fcping.c b/fcping.c -index bc51d5f..f92516f 100644 +index c6f74a6..399b778 100644 --- a/fcping.c +++ b/fcping.c @@ -25,6 +25,7 @@ @@ -93,7 +52,7 @@ index bc51d5f..f92516f 100644 #include #include #include -@@ -812,17 +813,17 @@ static void fp_check_data_len() +@@ -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" @@ -116,3 +75,6 @@ index bc51d5f..f92516f 100644 } /* +-- +1.8.1.4 + diff --git a/0021-fcnsq-Fixup-help-text.patch b/0021-fcnsq-Fixup-help-text.patch new file mode 100644 index 0000000..15274d2 --- /dev/null +++ b/0021-fcnsq-Fixup-help-text.patch @@ -0,0 +1,28 @@ +From a300e36092c51953cc55691f2d7514ee14ba1431 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 11:22:02 +0100 +Subject: fcnsq: Fixup help text + +The help text was missing the '-q' short option. + +Signed-off-by: Hannes Reinecke +--- + 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 \n" + " --gsnn \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 + diff --git a/0022-fcnsq-Fixup-64bit-integer-handling.patch b/0022-fcnsq-Fixup-64bit-integer-handling.patch new file mode 100644 index 0000000..6cbb4a7 --- /dev/null +++ b/0022-fcnsq-Fixup-64bit-integer-handling.patch @@ -0,0 +1,78 @@ +From 0fc2690e701941dfa71ae207286b39b7d99ed801 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 11:57:30 +0100 +Subject: fcnsq: Fixup 64bit integer handling + +Signed-off-by: Hannes Reinecke +--- + fcnsq.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/fcnsq.c b/fcnsq.c +index 2510f1c..68a0697 100644 +--- a/fcnsq.c ++++ b/fcnsq.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -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 + diff --git a/0023-fcoemon-add-systemd-service-file.patch b/0023-fcoemon-add-systemd-service-file.patch new file mode 100644 index 0000000..bc0d0e2 --- /dev/null +++ b/0023-fcoemon-add-systemd-service-file.patch @@ -0,0 +1,99 @@ +From bf7f4b232fec6767e767287d2f04cd782467000d Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 11:32:20 +0100 +Subject: fcoemon: add systemd service file + +Add fcoe.service file to start fcoemon from systemd + +Signed-off-by: Hannes Reinecke +--- + 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 + diff --git a/0024-fcoemon-systemd-socket-activation.patch b/0024-fcoemon-systemd-socket-activation.patch new file mode 100644 index 0000000..a37aabc --- /dev/null +++ b/0024-fcoemon-systemd-socket-activation.patch @@ -0,0 +1,130 @@ +From a8993f1a41d65d5b6e1a4fef081eb2d84bb0426b Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 6 Dec 2013 10:59:19 +0100 +Subject: fcoemon: systemd socket activation + +Implement systemd socket activation on the CLIF socket. + +Signed-off-by: Hannes Reinecke +--- + 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 + diff --git a/fcoe-utils-1.0.18-help.patch b/fcoe-utils-1.0.18-help.patch deleted file mode 100644 index e5779d9..0000000 --- a/fcoe-utils-1.0.18-help.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/fcnsq.c b/fcnsq.c -index 8722b21..466a85e 100644 ---- a/fcnsq.c -+++ b/fcnsq.c -@@ -360,7 +360,7 @@ static void help(int status) - " --gspn \n" - " --gsnn \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" - ); diff --git a/fcoe-utils-1.0.28-systemd-doc.patch b/fcoe-utils-1.0.28-systemd-doc.patch deleted file mode 100644 index 924e97d..0000000 --- a/fcoe-utils-1.0.28-systemd-doc.patch +++ /dev/null @@ -1,25 +0,0 @@ -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/fcoe-utils-1.0.29-make.patch b/fcoe-utils-1.0.29-make.patch index 84febf4..b31f7ae 100644 --- a/fcoe-utils-1.0.29-make.patch +++ b/fcoe-utils-1.0.29-make.patch @@ -11,12 +11,3 @@ index 5cbc15f..57bdbdb 100644 ## pass the sysconfdir into the C proprocessor AM_CPPFLAGS += -DSYSCONFDIR="\"${sysconfdir}\"" -D_FORTIFY_SOURCE=2 AM_CFLAGS = -Wall -Wformat=2 -Werror -Wmissing-prototypes -Wstrict-prototypes -@@ -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 \ diff --git a/fcoe-utils.changes b/fcoe-utils.changes index fca9dff..717da33 100644 --- a/fcoe-utils.changes +++ b/fcoe-utils.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Dec 6 12:54:33 CET 2013 - hare@suse.de + +- Add systemd integration +- Reshuffle patches for upstream integration +- Remove old patches + ------------------------------------------------------------------- Fri Dec 6 09:11:57 CET 2013 - hare@suse.de diff --git a/fcoe-utils.spec b/fcoe-utils.spec index bb84a66..4c13925 100644 --- a/fcoe-utils.spec +++ b/fcoe-utils.spec @@ -26,7 +26,7 @@ BuildRequires: libtool BuildRequires: open-lldp-devel Requires: device-mapper Requires: iproute -BuildRequires: systemd +BuildRequires: systemd-devel %systemd_requires Version: 1.0.29 Release: 0 @@ -35,7 +35,6 @@ License: GPL-2.0 Group: System/Daemons # git://open-fcoe.org/fcoe/fcoe-utils.git Source0: %{name}-%{version}.tar.xz -Source1: fcoe.service Source2: fcoe.config Source20: mkinitrd-boot.sh Source22: mkinitrd-setup.sh @@ -58,13 +57,17 @@ 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 +# Patches to be upstreamed +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 + # Patches from Fedora Patch101: fcoe-utils-1.0.29-make.patch -Patch102: fcoe-utils-1.0.18-help.patch -Patch103: fcoe-utils-1.0.28-format-strings.patch -Patch104: fcoe-utils-1.0.28-systemd-doc.patch -# PATCH-FIX-UPSTREAM: fcoe-utils-1.0.29-as-needed.patch -Patch105: fcoe-utils-1.0.29-as-needed.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -91,11 +94,14 @@ connections. %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 %patch101 -p1 -%patch102 -p1 -%patch103 -p1 -%patch104 -p1 -%patch105 -p1 %build autoreconf -vi @@ -113,8 +119,6 @@ install -m 755 %{S:20} ${RPM_BUILD_ROOT}/lib/mkinitrd/scripts/boot-fcoe.sh install -m 755 %{S:22} ${RPM_BUILD_ROOT}/lib/mkinitrd/scripts/setup-fcoe.sh # unitfile -mkdir -p %{buildroot}%{_unitdir} -install -p -m 644 %{SOURCE1} %{buildroot}%{_unitdir} ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcfcoe # config @@ -154,6 +158,7 @@ exit 0 %{_sbindir}/* %{_mandir}/man8/* %{_unitdir}/fcoe.service +%{_unitdir}/fcoemon.socket %{_sysconfdir}/fcoe/ %config(noreplace) %{_sysconfdir}/fcoe/config %config(noreplace) %{_sysconfdir}/fcoe/cfg-ethx diff --git a/fcoe.service b/fcoe.service deleted file mode 100644 index d351079..0000000 --- a/fcoe.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Open-FCoE Inititator. -After=syslog.target network.target lldpad.service - -[Service] -Type=forking -EnvironmentFile=/etc/sysconfig/fcoe -ExecStartPre=/sbin/modprobe -qa $SUPPORTED_DRIVERS -ExecStart=/usr/sbin/fcoemon $FCOEMON_OPTS - -[Install] -WantedBy=multi-user.target From fe27e2b1a0f5a535bda8b46c9292a5547eb173b7adb71a4ba073893b5369068f Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 6 Dec 2013 14:39:04 +0000 Subject: [PATCH 4/4] - Reshuffle patches for upstream integration: * Add patch 0018-Add-missing-DESTDIR-when-installing-bash-completion.patch * Add patch 0019-Fix-build-with-Wl-as-needed.patch * Add patch 0020-Fix-integer-formatting.patch * Add patch 0021-fcnsq-Fixup-help-text.patch * Add patch 0022-fcnsq-Fixup-64bit-integer-handling.patch - Add systemd integration patches: * Add patch 0023-fcoemon-add-systemd-service-file.patch * Add patch 0024-fcoemon-systemd-socket-activation.patch - Remove obsolete patch fcoe-utils-1.0.18-help.patch - Remove obsolete patch fcoe-utils-1.0.28-format-strings.patch - Remove obsolete patch fcoe-utils-1.0.28-systemd-doc.patch - Remove obsolete patch fcoe-utils-1.0.29-as-needed.patch - Small fixes from upstream * Add patch 0001-man-Fix-small-typo-regarding-fcf-option.patch * Add patch 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch * Add patch 0003-fipvlan-fails-on-powerpc.patch * Add patch 0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch * Add patch 0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch * Add patch 0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch * Add patch 0007-fipvlan-create-VLANs-from-netlink-handler.patch * Add patch 0008-fipvlan-Start-FCoE-from-netlink-handler.patch * Add patch 0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch * Add patch 0010-fipvlan-Re-send-VLAN-discovery.patch * Add patch 0011-fipvlan-update-manpage.patch * Add patch 0012-fipvlan-Leave-link-up-if-requested.patch * Add patch 0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch * Add patch 0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch * Add patch 0015-fipvlan-break-out-of-receive-loop-on-error.patch * Add patch 0016-fipvlan-handle-errors-from-fip-socket-creation.patch OBS-URL: https://build.opensuse.org/package/show/network:fcoe/fcoe-utils?expand=0&rev=10 --- fcoe-utils.changes | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/fcoe-utils.changes b/fcoe-utils.changes index 717da33..40ddbba 100644 --- a/fcoe-utils.changes +++ b/fcoe-utils.changes @@ -1,15 +1,42 @@ ------------------------------------------------------------------- Fri Dec 6 12:54:33 CET 2013 - hare@suse.de -- Add systemd integration -- Reshuffle patches for upstream integration -- Remove old patches +- Reshuffle patches for upstream integration: + * Add patch 0018-Add-missing-DESTDIR-when-installing-bash-completion.patch + * Add patch 0019-Fix-build-with-Wl-as-needed.patch + * Add patch 0020-Fix-integer-formatting.patch + * Add patch 0021-fcnsq-Fixup-help-text.patch + * Add patch 0022-fcnsq-Fixup-64bit-integer-handling.patch +- Add systemd integration patches: + * Add patch 0023-fcoemon-add-systemd-service-file.patch + * Add patch 0024-fcoemon-systemd-socket-activation.patch +- Remove obsolete patch fcoe-utils-1.0.18-help.patch +- Remove obsolete patch fcoe-utils-1.0.28-format-strings.patch +- Remove obsolete patch fcoe-utils-1.0.28-systemd-doc.patch +- Remove obsolete patch fcoe-utils-1.0.29-as-needed.patch ------------------------------------------------------------------- Fri Dec 6 09:11:57 CET 2013 - hare@suse.de -- Include fipvlan update from upstream/SLES11 SP3 - Small fixes from upstream + * Add patch 0001-man-Fix-small-typo-regarding-fcf-option.patch + * Add patch 0002-Don-t-call-AM_INIT_AUTOMAKE-twice.patch +- Include fipvlan update from upstream/SLES11 SP3 + * Add patch 0003-fipvlan-fails-on-powerpc.patch + * Add patch 0004-fipvlan-Only-shutdown-interfaces-if-no-vlans-are-cre.patch + * Add patch 0005-fipvlan-start-VLAN-interface-from-netlink-handler.patch + * Add patch 0006-fipvlan-Extract-create_missing_vlan-function-from-lo.patch + * Add patch 0007-fipvlan-create-VLANs-from-netlink-handler.patch + * Add patch 0008-fipvlan-Start-FCoE-from-netlink-handler.patch + * Add patch 0009-fipvlan-Update-wait-loop-to-wait-for-VLANs.patch + * Add patch 0010-fipvlan-Re-send-VLAN-discovery.patch + * Add patch 0011-fipvlan-update-manpage.patch + * Add patch 0012-fipvlan-Leave-link-up-if-requested.patch + * Add patch 0013-fipvlan-Update-manpage-to-reflect-correct-timeout.patch + * Add patch 0014-fipvlan-Do-not-shut-down-FCoE-connections-on-physica.patch + * Add patch 0015-fipvlan-break-out-of-receive-loop-on-error.patch + * Add patch 0016-fipvlan-handle-errors-from-fip-socket-creation.patch + * Add patch 0017-fipvlan-filter-interfaces-from-rtnl_getlink.patch ------------------------------------------------------------------- Thu Oct 10 15:22:26 UTC 2013 - tchvatal@suse.com