From 9a79b1c7b8ffb8301aacc5ce275887234aeeef94 Mon Sep 17 00:00:00 2001 From: Petr Sabata Date: Apr 20 2011 09:03:37 +0000 Subject: 1.0.18+ bump BuildRoot and ExcludeArch cleanup --- diff --git a/.gitignore b/.gitignore index 69b2beb..424588c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,33 @@ -fcoe-utils-1.0.14.tar.gz -/fcoe-utils-1.0.17.tar.gz +# standard autotools stuff +.deps/ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache/ +compile +config.log +config.status +configure +depcomp +install-sh +missing + +# other autoconf generated files +fcoe-utils.spec +fcoeplumb +fcoe_utils_version.h + +# compile generated files +*.o +fcoeadm +fcoemon +fipvlan +fcping +fcnsq +fcrls +etc/initd/fcoe + +# build.sh generated files +fcoe-utils-*.tar.gz +fcoe-utils-*.rpm +/fcoe-utils-1.0.18.tar.bz2 diff --git a/fcoe-include-headers.patch b/fcoe-include-headers.patch deleted file mode 100644 index eafc0a2..0000000 --- a/fcoe-include-headers.patch +++ /dev/null @@ -1,1494 +0,0 @@ -diff -Naurd fcoe-utils-1.0.14.orig/fcnsq.c fcoe-utils-1.0.14/fcnsq.c ---- fcoe-utils-1.0.14.orig/fcnsq.c 2010-05-18 23:50:48.000000000 +0200 -+++ fcoe-utils-1.0.14/fcnsq.c 2011-02-23 15:05:18.289429317 +0100 -@@ -39,9 +39,9 @@ - typedef __u64 u64; - #include - #include --#include --#include --#include -+#include "fc_gs.h" -+#include "fc_ns.h" -+#include "scsi_bsg_fc.h" - - static bool quiet = false; - -diff -Naurd fcoe-utils-1.0.14.orig/fcping.c fcoe-utils-1.0.14/fcping.c ---- fcoe-utils-1.0.14.orig/fcping.c 2010-05-18 23:50:48.000000000 +0200 -+++ fcoe-utils-1.0.14/fcping.c 2011-02-23 15:05:18.289429317 +0100 -@@ -49,10 +49,10 @@ - #include "fc_types.h" - typedef uint8_t u8; - #include --#include --#include --#include --#include -+#include "fc_ns.h" -+#include "fc_gs.h" -+#include "fc_els.h" -+#include "scsi_bsg_fc.h" - - #include "fcoe_utils.h" - -diff -Naurd fcoe-utils-1.0.14.orig/fcrls.c fcoe-utils-1.0.14/fcrls.c ---- fcoe-utils-1.0.14.orig/fcrls.c 2010-05-18 23:50:48.000000000 +0200 -+++ fcoe-utils-1.0.14/fcrls.c 2011-02-23 15:05:34.781471067 +0100 -@@ -40,8 +40,8 @@ - typedef __u64 u64; - #include - #include --#include --#include -+#include "fc_els.h" -+#include "scsi_bsg_fc.h" - - #define ntoh24(n) (u32) ((n)[0] << 16 | (n)[1] << 8 | (n)[2]) - #define hton24(h) { (h) >> 16 & 0xff, (h) >> 8 & 0xff, (h) & 0xff } -diff -Naurd fcoe-utils-1.0.14.orig/include/fc_els.h fcoe-utils-1.0.14/include/fc_els.h ---- fcoe-utils-1.0.14.orig/include/fc_els.h 1970-01-01 01:00:00.000000000 +0100 -+++ fcoe-utils-1.0.14/include/fc_els.h 2011-02-23 15:05:18.302052163 +0100 -@@ -0,0 +1,820 @@ -+/* -+ * Copyright(c) 2007 Intel Corporation. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms and conditions of the GNU General Public License, -+ * version 2, as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ * You should have received a copy of the GNU General Public License along with -+ * this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Maintained at www.Open-FCoE.org -+ */ -+ -+#ifndef _FC_ELS_H_ -+#define _FC_ELS_H_ -+ -+#include -+ -+/* -+ * Fibre Channel Switch - Enhanced Link Services definitions. -+ * From T11 FC-LS Rev 1.2 June 7, 2005. -+ */ -+ -+/* -+ * ELS Command codes - byte 0 of the frame payload -+ */ -+enum fc_els_cmd { -+ ELS_LS_RJT = 0x01, /* ESL reject */ -+ ELS_LS_ACC = 0x02, /* ESL Accept */ -+ ELS_PLOGI = 0x03, /* N_Port login */ -+ ELS_FLOGI = 0x04, /* F_Port login */ -+ ELS_LOGO = 0x05, /* Logout */ -+ ELS_ABTX = 0x06, /* Abort exchange - obsolete */ -+ ELS_RCS = 0x07, /* read connection status */ -+ ELS_RES = 0x08, /* read exchange status block */ -+ ELS_RSS = 0x09, /* read sequence status block */ -+ ELS_RSI = 0x0a, /* read sequence initiative */ -+ ELS_ESTS = 0x0b, /* establish streaming */ -+ ELS_ESTC = 0x0c, /* estimate credit */ -+ ELS_ADVC = 0x0d, /* advise credit */ -+ ELS_RTV = 0x0e, /* read timeout value */ -+ ELS_RLS = 0x0f, /* read link error status block */ -+ ELS_ECHO = 0x10, /* echo */ -+ ELS_TEST = 0x11, /* test */ -+ ELS_RRQ = 0x12, /* reinstate recovery qualifier */ -+ ELS_REC = 0x13, /* read exchange concise */ -+ ELS_SRR = 0x14, /* sequence retransmission request */ -+ ELS_PRLI = 0x20, /* process login */ -+ ELS_PRLO = 0x21, /* process logout */ -+ ELS_SCN = 0x22, /* state change notification */ -+ ELS_TPLS = 0x23, /* test process login state */ -+ ELS_TPRLO = 0x24, /* third party process logout */ -+ ELS_LCLM = 0x25, /* login control list mgmt (obs) */ -+ ELS_GAID = 0x30, /* get alias_ID */ -+ ELS_FACT = 0x31, /* fabric activate alias_id */ -+ ELS_FDACDT = 0x32, /* fabric deactivate alias_id */ -+ ELS_NACT = 0x33, /* N-port activate alias_id */ -+ ELS_NDACT = 0x34, /* N-port deactivate alias_id */ -+ ELS_QOSR = 0x40, /* quality of service request */ -+ ELS_RVCS = 0x41, /* read virtual circuit status */ -+ ELS_PDISC = 0x50, /* discover N_port service params */ -+ ELS_FDISC = 0x51, /* discover F_port service params */ -+ ELS_ADISC = 0x52, /* discover address */ -+ ELS_RNC = 0x53, /* report node cap (obs) */ -+ ELS_FARP_REQ = 0x54, /* FC ARP request */ -+ ELS_FARP_REPL = 0x55, /* FC ARP reply */ -+ ELS_RPS = 0x56, /* read port status block */ -+ ELS_RPL = 0x57, /* read port list */ -+ ELS_RPBC = 0x58, /* read port buffer condition */ -+ ELS_FAN = 0x60, /* fabric address notification */ -+ ELS_RSCN = 0x61, /* registered state change notification */ -+ ELS_SCR = 0x62, /* state change registration */ -+ ELS_RNFT = 0x63, /* report node FC-4 types */ -+ ELS_CSR = 0x68, /* clock synch. request */ -+ ELS_CSU = 0x69, /* clock synch. update */ -+ ELS_LINIT = 0x70, /* loop initialize */ -+ ELS_LSTS = 0x72, /* loop status */ -+ ELS_RNID = 0x78, /* request node ID data */ -+ ELS_RLIR = 0x79, /* registered link incident report */ -+ ELS_LIRR = 0x7a, /* link incident record registration */ -+ ELS_SRL = 0x7b, /* scan remote loop */ -+ ELS_SBRP = 0x7c, /* set bit-error reporting params */ -+ ELS_RPSC = 0x7d, /* report speed capabilities */ -+ ELS_QSA = 0x7e, /* query security attributes */ -+ ELS_EVFP = 0x7f, /* exchange virt. fabrics params */ -+ ELS_LKA = 0x80, /* link keep-alive */ -+ ELS_AUTH_ELS = 0x90, /* authentication ELS */ -+}; -+ -+/* -+ * Initializer useful for decoding table. -+ * Please keep this in sync with the above definitions. -+ */ -+#define FC_ELS_CMDS_INIT { \ -+ [ELS_LS_RJT] = "LS_RJT", \ -+ [ELS_LS_ACC] = "LS_ACC", \ -+ [ELS_PLOGI] = "PLOGI", \ -+ [ELS_FLOGI] = "FLOGI", \ -+ [ELS_LOGO] = "LOGO", \ -+ [ELS_ABTX] = "ABTX", \ -+ [ELS_RCS] = "RCS", \ -+ [ELS_RES] = "RES", \ -+ [ELS_RSS] = "RSS", \ -+ [ELS_RSI] = "RSI", \ -+ [ELS_ESTS] = "ESTS", \ -+ [ELS_ESTC] = "ESTC", \ -+ [ELS_ADVC] = "ADVC", \ -+ [ELS_RTV] = "RTV", \ -+ [ELS_RLS] = "RLS", \ -+ [ELS_ECHO] = "ECHO", \ -+ [ELS_TEST] = "TEST", \ -+ [ELS_RRQ] = "RRQ", \ -+ [ELS_REC] = "REC", \ -+ [ELS_SRR] = "SRR", \ -+ [ELS_PRLI] = "PRLI", \ -+ [ELS_PRLO] = "PRLO", \ -+ [ELS_SCN] = "SCN", \ -+ [ELS_TPLS] = "TPLS", \ -+ [ELS_TPRLO] = "TPRLO", \ -+ [ELS_LCLM] = "LCLM", \ -+ [ELS_GAID] = "GAID", \ -+ [ELS_FACT] = "FACT", \ -+ [ELS_FDACDT] = "FDACDT", \ -+ [ELS_NACT] = "NACT", \ -+ [ELS_NDACT] = "NDACT", \ -+ [ELS_QOSR] = "QOSR", \ -+ [ELS_RVCS] = "RVCS", \ -+ [ELS_PDISC] = "PDISC", \ -+ [ELS_FDISC] = "FDISC", \ -+ [ELS_ADISC] = "ADISC", \ -+ [ELS_RNC] = "RNC", \ -+ [ELS_FARP_REQ] = "FARP_REQ", \ -+ [ELS_FARP_REPL] = "FARP_REPL", \ -+ [ELS_RPS] = "RPS", \ -+ [ELS_RPL] = "RPL", \ -+ [ELS_RPBC] = "RPBC", \ -+ [ELS_FAN] = "FAN", \ -+ [ELS_RSCN] = "RSCN", \ -+ [ELS_SCR] = "SCR", \ -+ [ELS_RNFT] = "RNFT", \ -+ [ELS_CSR] = "CSR", \ -+ [ELS_CSU] = "CSU", \ -+ [ELS_LINIT] = "LINIT", \ -+ [ELS_LSTS] = "LSTS", \ -+ [ELS_RNID] = "RNID", \ -+ [ELS_RLIR] = "RLIR", \ -+ [ELS_LIRR] = "LIRR", \ -+ [ELS_SRL] = "SRL", \ -+ [ELS_SBRP] = "SBRP", \ -+ [ELS_RPSC] = "RPSC", \ -+ [ELS_QSA] = "QSA", \ -+ [ELS_EVFP] = "EVFP", \ -+ [ELS_LKA] = "LKA", \ -+ [ELS_AUTH_ELS] = "AUTH_ELS", \ -+} -+ -+/* -+ * LS_ACC payload. -+ */ -+struct fc_els_ls_acc { -+ __u8 la_cmd; /* command code ELS_LS_ACC */ -+ __u8 la_resv[3]; /* reserved */ -+}; -+ -+/* -+ * ELS reject payload. -+ */ -+struct fc_els_ls_rjt { -+ __u8 er_cmd; /* command code ELS_LS_RJT */ -+ __u8 er_resv[4]; /* reserved must be zero */ -+ __u8 er_reason; /* reason (enum fc_els_rjt_reason below) */ -+ __u8 er_explan; /* explanation (enum fc_els_rjt_explan below) */ -+ __u8 er_vendor; /* vendor specific code */ -+}; -+ -+/* -+ * ELS reject reason codes (er_reason). -+ */ -+enum fc_els_rjt_reason { -+ ELS_RJT_NONE = 0, /* no reject - not to be sent */ -+ ELS_RJT_INVAL = 0x01, /* invalid ELS command code */ -+ ELS_RJT_LOGIC = 0x03, /* logical error */ -+ ELS_RJT_BUSY = 0x05, /* logical busy */ -+ ELS_RJT_PROT = 0x07, /* protocol error */ -+ ELS_RJT_UNAB = 0x09, /* unable to perform command request */ -+ ELS_RJT_UNSUP = 0x0b, /* command not supported */ -+ ELS_RJT_INPROG = 0x0e, /* command already in progress */ -+ ELS_RJT_VENDOR = 0xff, /* vendor specific error */ -+}; -+ -+ -+/* -+ * reason code explanation (er_explan). -+ */ -+enum fc_els_rjt_explan { -+ ELS_EXPL_NONE = 0x00, /* No additional explanation */ -+ ELS_EXPL_SPP_OPT_ERR = 0x01, /* service parameter error - options */ -+ ELS_EXPL_SPP_ICTL_ERR = 0x03, /* service parm error - initiator ctl */ -+ ELS_EXPL_AH = 0x11, /* invalid association header */ -+ ELS_EXPL_AH_REQ = 0x13, /* association_header required */ -+ ELS_EXPL_SID = 0x15, /* invalid originator S_ID */ -+ ELS_EXPL_OXID_RXID = 0x17, /* invalid OX_ID-RX_ID combination */ -+ ELS_EXPL_INPROG = 0x19, /* Request already in progress */ -+ ELS_EXPL_PLOGI_REQD = 0x1e, /* N_Port login required */ -+ ELS_EXPL_INSUF_RES = 0x29, /* insufficient resources */ -+ ELS_EXPL_UNAB_DATA = 0x2a, /* unable to supply requested data */ -+ ELS_EXPL_UNSUPR = 0x2c, /* Request not supported */ -+ ELS_EXPL_INV_LEN = 0x2d, /* Invalid payload length */ -+ /* TBD - above definitions incomplete */ -+}; -+ -+/* -+ * Common service parameters (N ports). -+ */ -+struct fc_els_csp { -+ __u8 sp_hi_ver; /* highest version supported (obs.) */ -+ __u8 sp_lo_ver; /* highest version supported (obs.) */ -+ __be16 sp_bb_cred; /* buffer-to-buffer credits */ -+ __be16 sp_features; /* common feature flags */ -+ __be16 sp_bb_data; /* b-b state number and data field sz */ -+ union { -+ struct { -+ __be16 _sp_tot_seq; /* total concurrent sequences */ -+ __be16 _sp_rel_off; /* rel. offset by info cat */ -+ } sp_plogi; -+ struct { -+ __be32 _sp_r_a_tov; /* resource alloc. timeout msec */ -+ } sp_flogi_acc; -+ } sp_u; -+ __be32 sp_e_d_tov; /* error detect timeout value */ -+}; -+#define sp_tot_seq sp_u.sp_plogi._sp_tot_seq -+#define sp_rel_off sp_u.sp_plogi._sp_rel_off -+#define sp_r_a_tov sp_u.sp_flogi_acc._sp_r_a_tov -+ -+#define FC_SP_BB_DATA_MASK 0xfff /* mask for data field size in sp_bb_data */ -+ -+/* -+ * Minimum and maximum values for max data field size in service parameters. -+ */ -+#define FC_SP_MIN_MAX_PAYLOAD FC_MIN_MAX_PAYLOAD -+#define FC_SP_MAX_MAX_PAYLOAD FC_MAX_PAYLOAD -+ -+/* -+ * sp_features -+ */ -+#define FC_SP_FT_NPIV 0x8000 /* multiple N_Port_ID support (FLOGI) */ -+#define FC_SP_FT_CIRO 0x8000 /* continuously increasing rel off (PLOGI) */ -+#define FC_SP_FT_CLAD 0x8000 /* clean address (in FLOGI LS_ACC) */ -+#define FC_SP_FT_RAND 0x4000 /* random relative offset */ -+#define FC_SP_FT_VAL 0x2000 /* valid vendor version level */ -+#define FC_SP_FT_NPIV_ACC 0x2000 /* NPIV assignment (FLOGI LS_ACC) */ -+#define FC_SP_FT_FPORT 0x1000 /* F port (1) vs. N port (0) */ -+#define FC_SP_FT_ABB 0x0800 /* alternate BB_credit management */ -+#define FC_SP_FT_EDTR 0x0400 /* E_D_TOV Resolution is nanoseconds */ -+#define FC_SP_FT_MCAST 0x0200 /* multicast */ -+#define FC_SP_FT_BCAST 0x0100 /* broadcast */ -+#define FC_SP_FT_HUNT 0x0080 /* hunt group */ -+#define FC_SP_FT_SIMP 0x0040 /* dedicated simplex */ -+#define FC_SP_FT_SEC 0x0020 /* reserved for security */ -+#define FC_SP_FT_CSYN 0x0010 /* clock synch. supported */ -+#define FC_SP_FT_RTTOV 0x0008 /* R_T_TOV value 100 uS, else 100 mS */ -+#define FC_SP_FT_HALF 0x0004 /* dynamic half duplex */ -+#define FC_SP_FT_SEQC 0x0002 /* SEQ_CNT */ -+#define FC_SP_FT_PAYL 0x0001 /* FLOGI payload length 256, else 116 */ -+ -+/* -+ * Class-specific service parameters. -+ */ -+struct fc_els_cssp { -+ __be16 cp_class; /* class flags */ -+ __be16 cp_init; /* initiator flags */ -+ __be16 cp_recip; /* recipient flags */ -+ __be16 cp_rdfs; /* receive data field size */ -+ __be16 cp_con_seq; /* concurrent sequences */ -+ __be16 cp_ee_cred; /* N-port end-to-end credit */ -+ __u8 cp_resv1; /* reserved */ -+ __u8 cp_open_seq; /* open sequences per exchange */ -+ __u8 _cp_resv2[2]; /* reserved */ -+}; -+ -+/* -+ * cp_class flags. -+ */ -+#define FC_CPC_VALID 0x8000 /* class valid */ -+#define FC_CPC_IMIX 0x4000 /* intermix mode */ -+#define FC_CPC_SEQ 0x0800 /* sequential delivery */ -+#define FC_CPC_CAMP 0x0200 /* camp-on */ -+#define FC_CPC_PRI 0x0080 /* priority */ -+ -+/* -+ * cp_init flags. -+ * (TBD: not all flags defined here). -+ */ -+#define FC_CPI_CSYN 0x0010 /* clock synch. capable */ -+ -+/* -+ * cp_recip flags. -+ */ -+#define FC_CPR_CSYN 0x0008 /* clock synch. capable */ -+ -+/* -+ * NFC_ELS_FLOGI: Fabric login request. -+ * NFC_ELS_PLOGI: Port login request (same format). -+ */ -+struct fc_els_flogi { -+ __u8 fl_cmd; /* command */ -+ __u8 _fl_resvd[3]; /* must be zero */ -+ struct fc_els_csp fl_csp; /* common service parameters */ -+ __be64 fl_wwpn; /* port name */ -+ __be64 fl_wwnn; /* node name */ -+ struct fc_els_cssp fl_cssp[4]; /* class 1-4 service parameters */ -+ __u8 fl_vend[16]; /* vendor version level */ -+} __attribute__((__packed__)); -+ -+/* -+ * Process login service parameter page. -+ */ -+struct fc_els_spp { -+ __u8 spp_type; /* type code or common service params */ -+ __u8 spp_type_ext; /* type code extension */ -+ __u8 spp_flags; -+ __u8 _spp_resvd; -+ __be32 spp_orig_pa; /* originator process associator */ -+ __be32 spp_resp_pa; /* responder process associator */ -+ __be32 spp_params; /* service parameters */ -+}; -+ -+/* -+ * spp_flags. -+ */ -+#define FC_SPP_OPA_VAL 0x80 /* originator proc. assoc. valid */ -+#define FC_SPP_RPA_VAL 0x40 /* responder proc. assoc. valid */ -+#define FC_SPP_EST_IMG_PAIR 0x20 /* establish image pair */ -+#define FC_SPP_RESP_MASK 0x0f /* mask for response code (below) */ -+ -+/* -+ * SPP response code in spp_flags - lower 4 bits. -+ */ -+enum fc_els_spp_resp { -+ FC_SPP_RESP_ACK = 1, /* request executed */ -+ FC_SPP_RESP_RES = 2, /* unable due to lack of resources */ -+ FC_SPP_RESP_INIT = 3, /* initialization not complete */ -+ FC_SPP_RESP_NO_PA = 4, /* unknown process associator */ -+ FC_SPP_RESP_CONF = 5, /* configuration precludes image pair */ -+ FC_SPP_RESP_COND = 6, /* request completed conditionally */ -+ FC_SPP_RESP_MULT = 7, /* unable to handle multiple SPPs */ -+ FC_SPP_RESP_INVL = 8, /* SPP is invalid */ -+}; -+ -+/* -+ * ELS_RRQ - Reinstate Recovery Qualifier -+ */ -+struct fc_els_rrq { -+ __u8 rrq_cmd; /* command (0x12) */ -+ __u8 rrq_zero[3]; /* specified as zero - part of cmd */ -+ __u8 rrq_resvd; /* reserved */ -+ __u8 rrq_s_id[3]; /* originator FID */ -+ __be16 rrq_ox_id; /* originator exchange ID */ -+ __be16 rrq_rx_id; /* responders exchange ID */ -+}; -+ -+/* -+ * ELS_REC - Read exchange concise. -+ */ -+struct fc_els_rec { -+ __u8 rec_cmd; /* command (0x13) */ -+ __u8 rec_zero[3]; /* specified as zero - part of cmd */ -+ __u8 rec_resvd; /* reserved */ -+ __u8 rec_s_id[3]; /* originator FID */ -+ __be16 rec_ox_id; /* originator exchange ID */ -+ __be16 rec_rx_id; /* responders exchange ID */ -+}; -+ -+/* -+ * ELS_REC LS_ACC payload. -+ */ -+struct fc_els_rec_acc { -+ __u8 reca_cmd; /* accept (0x02) */ -+ __u8 reca_zero[3]; /* specified as zero - part of cmd */ -+ __be16 reca_ox_id; /* originator exchange ID */ -+ __be16 reca_rx_id; /* responders exchange ID */ -+ __u8 reca_resvd1; /* reserved */ -+ __u8 reca_ofid[3]; /* originator FID */ -+ __u8 reca_resvd2; /* reserved */ -+ __u8 reca_rfid[3]; /* responder FID */ -+ __be32 reca_fc4value; /* FC4 value */ -+ __be32 reca_e_stat; /* ESB (exchange status block) status */ -+}; -+ -+/* -+ * ELS_PRLI - Process login request and response. -+ */ -+struct fc_els_prli { -+ __u8 prli_cmd; /* command */ -+ __u8 prli_spp_len; /* length of each serv. parm. page */ -+ __be16 prli_len; /* length of entire payload */ -+ /* service parameter pages follow */ -+}; -+ -+/* -+ * ELS_ADISC payload -+ */ -+struct fc_els_adisc { -+ __u8 adisc_cmd; -+ __u8 adisc_resv[3]; -+ __u8 adisc_resv1; -+ __u8 adisc_hard_addr[3]; -+ __be64 adisc_wwpn; -+ __be64 adisc_wwnn; -+ __u8 adisc_resv2; -+ __u8 adisc_port_id[3]; -+} __attribute__((__packed__)); -+ -+/* -+ * ELS_LOGO - process or fabric logout. -+ */ -+struct fc_els_logo { -+ __u8 fl_cmd; /* command code */ -+ __u8 fl_zero[3]; /* specified as zero - part of cmd */ -+ __u8 fl_resvd; /* reserved */ -+ __u8 fl_n_port_id[3];/* N port ID */ -+ __be64 fl_n_port_wwn; /* port name */ -+}; -+ -+/* -+ * ELS_RTV - read timeout value. -+ */ -+struct fc_els_rtv { -+ __u8 rtv_cmd; /* command code 0x0e */ -+ __u8 rtv_zero[3]; /* specified as zero - part of cmd */ -+}; -+ -+/* -+ * LS_ACC for ELS_RTV - read timeout value. -+ */ -+struct fc_els_rtv_acc { -+ __u8 rtv_cmd; /* command code 0x02 */ -+ __u8 rtv_zero[3]; /* specified as zero - part of cmd */ -+ __be32 rtv_r_a_tov; /* resource allocation timeout value */ -+ __be32 rtv_e_d_tov; /* error detection timeout value */ -+ __be32 rtv_toq; /* timeout qualifier (see below) */ -+}; -+ -+/* -+ * rtv_toq bits. -+ */ -+#define FC_ELS_RTV_EDRES (1 << 26) /* E_D_TOV resolution is nS else mS */ -+#define FC_ELS_RTV_RTTOV (1 << 19) /* R_T_TOV is 100 uS else 100 mS */ -+ -+/* -+ * ELS_SCR - state change registration payload. -+ */ -+struct fc_els_scr { -+ __u8 scr_cmd; /* command code */ -+ __u8 scr_resv[6]; /* reserved */ -+ __u8 scr_reg_func; /* registration function (see below) */ -+}; -+ -+enum fc_els_scr_func { -+ ELS_SCRF_FAB = 1, /* fabric-detected registration */ -+ ELS_SCRF_NPORT = 2, /* Nx_Port-detected registration */ -+ ELS_SCRF_FULL = 3, /* full registration */ -+ ELS_SCRF_CLEAR = 255, /* remove any current registrations */ -+}; -+ -+/* -+ * ELS_RSCN - registered state change notification payload. -+ */ -+struct fc_els_rscn { -+ __u8 rscn_cmd; /* RSCN opcode (0x61) */ -+ __u8 rscn_page_len; /* page length (4) */ -+ __be16 rscn_plen; /* payload length including this word */ -+ -+ /* followed by 4-byte generic affected Port_ID pages */ -+}; -+ -+struct fc_els_rscn_page { -+ __u8 rscn_page_flags; /* event and address format */ -+ __u8 rscn_fid[3]; /* fabric ID */ -+}; -+ -+#define ELS_RSCN_EV_QUAL_BIT 2 /* shift count for event qualifier */ -+#define ELS_RSCN_EV_QUAL_MASK 0xf /* mask for event qualifier */ -+#define ELS_RSCN_ADDR_FMT_BIT 0 /* shift count for address format */ -+#define ELS_RSCN_ADDR_FMT_MASK 0x3 /* mask for address format */ -+ -+enum fc_els_rscn_ev_qual { -+ ELS_EV_QUAL_NONE = 0, /* unspecified */ -+ ELS_EV_QUAL_NS_OBJ = 1, /* changed name server object */ -+ ELS_EV_QUAL_PORT_ATTR = 2, /* changed port attribute */ -+ ELS_EV_QUAL_SERV_OBJ = 3, /* changed service object */ -+ ELS_EV_QUAL_SW_CONFIG = 4, /* changed switch configuration */ -+ ELS_EV_QUAL_REM_OBJ = 5, /* removed object */ -+}; -+ -+enum fc_els_rscn_addr_fmt { -+ ELS_ADDR_FMT_PORT = 0, /* rscn_fid is a port address */ -+ ELS_ADDR_FMT_AREA = 1, /* rscn_fid is a area address */ -+ ELS_ADDR_FMT_DOM = 2, /* rscn_fid is a domain address */ -+ ELS_ADDR_FMT_FAB = 3, /* anything on fabric may have changed */ -+}; -+ -+/* -+ * ELS_RNID - request Node ID. -+ */ -+struct fc_els_rnid { -+ __u8 rnid_cmd; /* RNID opcode (0x78) */ -+ __u8 rnid_resv[3]; /* reserved */ -+ __u8 rnid_fmt; /* data format */ -+ __u8 rnid_resv2[3]; /* reserved */ -+}; -+ -+/* -+ * Node Identification Data formats (rnid_fmt) -+ */ -+enum fc_els_rnid_fmt { -+ ELS_RNIDF_NONE = 0, /* no specific identification data */ -+ ELS_RNIDF_GEN = 0xdf, /* general topology discovery format */ -+}; -+ -+/* -+ * ELS_RNID response. -+ */ -+struct fc_els_rnid_resp { -+ __u8 rnid_cmd; /* response code (LS_ACC) */ -+ __u8 rnid_resv[3]; /* reserved */ -+ __u8 rnid_fmt; /* data format */ -+ __u8 rnid_cid_len; /* common ID data length */ -+ __u8 rnid_resv2; /* reserved */ -+ __u8 rnid_sid_len; /* specific ID data length */ -+}; -+ -+struct fc_els_rnid_cid { -+ __be64 rnid_wwpn; /* N port name */ -+ __be64 rnid_wwnn; /* node name */ -+}; -+ -+struct fc_els_rnid_gen { -+ __u8 rnid_vend_id[16]; /* vendor-unique ID */ -+ __be32 rnid_atype; /* associated type (see below) */ -+ __be32 rnid_phys_port; /* physical port number */ -+ __be32 rnid_att_nodes; /* number of attached nodes */ -+ __u8 rnid_node_mgmt; /* node management (see below) */ -+ __u8 rnid_ip_ver; /* IP version (see below) */ -+ __be16 rnid_prot_port; /* UDP / TCP port number */ -+ __be32 rnid_ip_addr[4]; /* IP address */ -+ __u8 rnid_resvd[2]; /* reserved */ -+ __be16 rnid_vend_spec; /* vendor-specific field */ -+}; -+ -+enum fc_els_rnid_atype { -+ ELS_RNIDA_UNK = 0x01, /* unknown */ -+ ELS_RNIDA_OTHER = 0x02, /* none of the following */ -+ ELS_RNIDA_HUB = 0x03, -+ ELS_RNIDA_SWITCH = 0x04, -+ ELS_RNIDA_GATEWAY = 0x05, -+ ELS_RNIDA_CONV = 0x06, /* Obsolete, do not use this value */ -+ ELS_RNIDA_HBA = 0x07, /* Obsolete, do not use this value */ -+ ELS_RNIDA_PROXY = 0x08, /* Obsolete, do not use this value */ -+ ELS_RNIDA_STORAGE = 0x09, -+ ELS_RNIDA_HOST = 0x0a, -+ ELS_RNIDA_SUBSYS = 0x0b, /* storage subsystem (e.g., RAID) */ -+ ELS_RNIDA_ACCESS = 0x0e, /* access device (e.g. media changer) */ -+ ELS_RNIDA_NAS = 0x11, /* NAS server */ -+ ELS_RNIDA_BRIDGE = 0x12, /* bridge */ -+ ELS_RNIDA_VIRT = 0x13, /* virtualization device */ -+ ELS_RNIDA_MF = 0xff, /* multifunction device (bits below) */ -+ ELS_RNIDA_MF_HUB = 1UL << 31, /* hub */ -+ ELS_RNIDA_MF_SW = 1UL << 30, /* switch */ -+ ELS_RNIDA_MF_GW = 1UL << 29, /* gateway */ -+ ELS_RNIDA_MF_ST = 1UL << 28, /* storage */ -+ ELS_RNIDA_MF_HOST = 1UL << 27, /* host */ -+ ELS_RNIDA_MF_SUB = 1UL << 26, /* storage subsystem */ -+ ELS_RNIDA_MF_ACC = 1UL << 25, /* storage access dev */ -+ ELS_RNIDA_MF_WDM = 1UL << 24, /* wavelength division mux */ -+ ELS_RNIDA_MF_NAS = 1UL << 23, /* NAS server */ -+ ELS_RNIDA_MF_BR = 1UL << 22, /* bridge */ -+ ELS_RNIDA_MF_VIRT = 1UL << 21, /* virtualization device */ -+}; -+ -+enum fc_els_rnid_mgmt { -+ ELS_RNIDM_SNMP = 0, -+ ELS_RNIDM_TELNET = 1, -+ ELS_RNIDM_HTTP = 2, -+ ELS_RNIDM_HTTPS = 3, -+ ELS_RNIDM_XML = 4, /* HTTP + XML */ -+}; -+ -+enum fc_els_rnid_ipver { -+ ELS_RNIDIP_NONE = 0, /* no IP support or node mgmt. */ -+ ELS_RNIDIP_V4 = 1, /* IPv4 */ -+ ELS_RNIDIP_V6 = 2, /* IPv6 */ -+}; -+ -+/* -+ * ELS RPL - Read Port List. -+ */ -+struct fc_els_rpl { -+ __u8 rpl_cmd; /* command */ -+ __u8 rpl_resv[5]; /* reserved - must be zero */ -+ __be16 rpl_max_size; /* maximum response size or zero */ -+ __u8 rpl_resv1; /* reserved - must be zero */ -+ __u8 rpl_index[3]; /* starting index */ -+}; -+ -+/* -+ * Port number block in RPL response. -+ */ -+struct fc_els_pnb { -+ __be32 pnb_phys_pn; /* physical port number */ -+ __u8 pnb_resv; /* reserved */ -+ __u8 pnb_port_id[3]; /* port ID */ -+ __be64 pnb_wwpn; /* port name */ -+}; -+ -+/* -+ * RPL LS_ACC response. -+ */ -+struct fc_els_rpl_resp { -+ __u8 rpl_cmd; /* ELS_LS_ACC */ -+ __u8 rpl_resv1; /* reserved - must be zero */ -+ __be16 rpl_plen; /* payload length */ -+ __u8 rpl_resv2; /* reserved - must be zero */ -+ __u8 rpl_llen[3]; /* list length */ -+ __u8 rpl_resv3; /* reserved - must be zero */ -+ __u8 rpl_index[3]; /* starting index */ -+ struct fc_els_pnb rpl_pnb[1]; /* variable number of PNBs */ -+}; -+ -+/* -+ * Link Error Status Block. -+ */ -+struct fc_els_lesb { -+ __be32 lesb_link_fail; /* link failure count */ -+ __be32 lesb_sync_loss; /* loss of synchronization count */ -+ __be32 lesb_sig_loss; /* loss of signal count */ -+ __be32 lesb_prim_err; /* primitive sequence error count */ -+ __be32 lesb_inv_word; /* invalid transmission word count */ -+ __be32 lesb_inv_crc; /* invalid CRC count */ -+}; -+ -+/* -+ * ELS RPS - Read Port Status Block request. -+ */ -+struct fc_els_rps { -+ __u8 rps_cmd; /* command */ -+ __u8 rps_resv[2]; /* reserved - must be zero */ -+ __u8 rps_flag; /* flag - see below */ -+ __be64 rps_port_spec; /* port selection */ -+}; -+ -+enum fc_els_rps_flag { -+ FC_ELS_RPS_DID = 0x00, /* port identified by D_ID of req. */ -+ FC_ELS_RPS_PPN = 0x01, /* port_spec is physical port number */ -+ FC_ELS_RPS_WWPN = 0x02, /* port_spec is port WWN */ -+}; -+ -+/* -+ * ELS RPS LS_ACC response. -+ */ -+struct fc_els_rps_resp { -+ __u8 rps_cmd; /* command - LS_ACC */ -+ __u8 rps_resv[2]; /* reserved - must be zero */ -+ __u8 rps_flag; /* flag - see below */ -+ __u8 rps_resv2[2]; /* reserved */ -+ __be16 rps_status; /* port status - see below */ -+ struct fc_els_lesb rps_lesb; /* link error status block */ -+}; -+ -+enum fc_els_rps_resp_flag { -+ FC_ELS_RPS_LPEV = 0x01, /* L_port extension valid */ -+}; -+ -+enum fc_els_rps_resp_status { -+ FC_ELS_RPS_PTP = 1 << 5, /* point-to-point connection */ -+ FC_ELS_RPS_LOOP = 1 << 4, /* loop mode */ -+ FC_ELS_RPS_FAB = 1 << 3, /* fabric present */ -+ FC_ELS_RPS_NO_SIG = 1 << 2, /* loss of signal */ -+ FC_ELS_RPS_NO_SYNC = 1 << 1, /* loss of synchronization */ -+ FC_ELS_RPS_RESET = 1 << 0, /* in link reset protocol */ -+}; -+ -+/* -+ * ELS LIRR - Link Incident Record Registration request. -+ */ -+struct fc_els_lirr { -+ __u8 lirr_cmd; /* command */ -+ __u8 lirr_resv[3]; /* reserved - must be zero */ -+ __u8 lirr_func; /* registration function */ -+ __u8 lirr_fmt; /* FC-4 type of RLIR requested */ -+ __u8 lirr_resv2[2]; /* reserved - must be zero */ -+}; -+ -+enum fc_els_lirr_func { -+ ELS_LIRR_SET_COND = 0x01, /* set - conditionally receive */ -+ ELS_LIRR_SET_UNCOND = 0x02, /* set - unconditionally receive */ -+ ELS_LIRR_CLEAR = 0xff /* clear registration */ -+}; -+ -+/* -+ * ELS SRL - Scan Remote Loop request. -+ */ -+struct fc_els_srl { -+ __u8 srl_cmd; /* command */ -+ __u8 srl_resv[3]; /* reserved - must be zero */ -+ __u8 srl_flag; /* flag - see below */ -+ __u8 srl_flag_param[3]; /* flag parameter */ -+}; -+ -+enum fc_els_srl_flag { -+ FC_ELS_SRL_ALL = 0x00, /* scan all FL ports */ -+ FC_ELS_SRL_ONE = 0x01, /* scan specified loop */ -+ FC_ELS_SRL_EN_PER = 0x02, /* enable periodic scanning (param) */ -+ FC_ELS_SRL_DIS_PER = 0x03, /* disable periodic scanning */ -+}; -+ -+/* -+ * ELS RLS - Read Link Error Status Block request. -+ */ -+struct fc_els_rls { -+ __u8 rls_cmd; /* command */ -+ __u8 rls_resv[4]; /* reserved - must be zero */ -+ __u8 rls_port_id[3]; /* port ID */ -+}; -+ -+/* -+ * ELS RLS LS_ACC Response. -+ */ -+struct fc_els_rls_resp { -+ __u8 rls_cmd; /* ELS_LS_ACC */ -+ __u8 rls_resv[3]; /* reserved - must be zero */ -+ struct fc_els_lesb rls_lesb; /* link error status block */ -+}; -+ -+/* -+ * ELS RLIR - Registered Link Incident Report. -+ * This is followed by the CLIR and the CLID, described below. -+ */ -+struct fc_els_rlir { -+ __u8 rlir_cmd; /* command */ -+ __u8 rlir_resv[3]; /* reserved - must be zero */ -+ __u8 rlir_fmt; /* format (FC4-type if type specific) */ -+ __u8 rlir_clr_len; /* common link incident record length */ -+ __u8 rlir_cld_len; /* common link incident desc. length */ -+ __u8 rlir_slr_len; /* spec. link incident record length */ -+}; -+ -+/* -+ * CLIR - Common Link Incident Record Data. - Sent via RLIR. -+ */ -+struct fc_els_clir { -+ __be64 clir_wwpn; /* incident port name */ -+ __be64 clir_wwnn; /* incident port node name */ -+ __u8 clir_port_type; /* incident port type */ -+ __u8 clir_port_id[3]; /* incident port ID */ -+ -+ __be64 clir_conn_wwpn; /* connected port name */ -+ __be64 clir_conn_wwnn; /* connected node name */ -+ __be64 clir_fab_name; /* fabric name */ -+ __be32 clir_phys_port; /* physical port number */ -+ __be32 clir_trans_id; /* transaction ID */ -+ __u8 clir_resv[3]; /* reserved */ -+ __u8 clir_ts_fmt; /* time stamp format */ -+ __be64 clir_timestamp; /* time stamp */ -+}; -+ -+/* -+ * CLIR clir_ts_fmt - time stamp format values. -+ */ -+enum fc_els_clir_ts_fmt { -+ ELS_CLIR_TS_UNKNOWN = 0, /* time stamp field unknown */ -+ ELS_CLIR_TS_SEC_FRAC = 1, /* time in seconds and fractions */ -+ ELS_CLIR_TS_CSU = 2, /* time in clock synch update format */ -+}; -+ -+/* -+ * Common Link Incident Descriptor - sent via RLIR. -+ */ -+struct fc_els_clid { -+ __u8 clid_iq; /* incident qualifier flags */ -+ __u8 clid_ic; /* incident code */ -+ __be16 clid_epai; /* domain/area of ISL */ -+}; -+ -+/* -+ * CLID incident qualifier flags. -+ */ -+enum fc_els_clid_iq { -+ ELS_CLID_SWITCH = 0x20, /* incident port is a switch node */ -+ ELS_CLID_E_PORT = 0x10, /* incident is an ISL (E) port */ -+ ELS_CLID_SEV_MASK = 0x0c, /* severity 2-bit field mask */ -+ ELS_CLID_SEV_INFO = 0x00, /* report is informational */ -+ ELS_CLID_SEV_INOP = 0x08, /* link not operational */ -+ ELS_CLID_SEV_DEG = 0x04, /* link degraded but operational */ -+ ELS_CLID_LASER = 0x02, /* subassembly is a laser */ -+ ELS_CLID_FRU = 0x01, /* format can identify a FRU */ -+}; -+ -+/* -+ * CLID incident code. -+ */ -+enum fc_els_clid_ic { -+ ELS_CLID_IC_IMPL = 1, /* implicit incident */ -+ ELS_CLID_IC_BER = 2, /* bit-error-rate threshold exceeded */ -+ ELS_CLID_IC_LOS = 3, /* loss of synch or signal */ -+ ELS_CLID_IC_NOS = 4, /* non-operational primitive sequence */ -+ ELS_CLID_IC_PST = 5, /* primitive sequence timeout */ -+ ELS_CLID_IC_INVAL = 6, /* invalid primitive sequence */ -+ ELS_CLID_IC_LOOP_TO = 7, /* loop initialization time out */ -+ ELS_CLID_IC_LIP = 8, /* receiving LIP */ -+}; -+ -+#endif /* _FC_ELS_H_ */ -diff -Naurd fcoe-utils-1.0.14.orig/include/fc_gs.h fcoe-utils-1.0.14/include/fc_gs.h ---- fcoe-utils-1.0.14.orig/include/fc_gs.h 1970-01-01 01:00:00.000000000 +0100 -+++ fcoe-utils-1.0.14/include/fc_gs.h 2011-02-23 15:05:18.302052163 +0100 -@@ -0,0 +1,96 @@ -+/* -+ * Copyright(c) 2007 Intel Corporation. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms and conditions of the GNU General Public License, -+ * version 2, as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ * You should have received a copy of the GNU General Public License along with -+ * this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Maintained at www.Open-FCoE.org -+ */ -+ -+#ifndef _FC_GS_H_ -+#define _FC_GS_H_ -+ -+#include -+ -+/* -+ * Fibre Channel Services - Common Transport. -+ * From T11.org FC-GS-2 Rev 5.3 November 1998. -+ */ -+ -+struct fc_ct_hdr { -+ __u8 ct_rev; /* revision */ -+ __u8 ct_in_id[3]; /* N_Port ID of original requestor */ -+ __u8 ct_fs_type; /* type of fibre channel service */ -+ __u8 ct_fs_subtype; /* subtype */ -+ __u8 ct_options; -+ __u8 _ct_resvd1; -+ __be16 ct_cmd; /* command / response code */ -+ __be16 ct_mr_size; /* maximum / residual size */ -+ __u8 _ct_resvd2; -+ __u8 ct_reason; /* reject reason */ -+ __u8 ct_explan; /* reason code explanation */ -+ __u8 ct_vendor; /* vendor unique data */ -+}; -+ -+#define FC_CT_HDR_LEN 16 /* expected sizeof (struct fc_ct_hdr) */ -+ -+enum fc_ct_rev { -+ FC_CT_REV = 1 /* common transport revision */ -+}; -+ -+/* -+ * ct_fs_type values. -+ */ -+enum fc_ct_fs_type { -+ FC_FST_ALIAS = 0xf8, /* alias service */ -+ FC_FST_MGMT = 0xfa, /* management service */ -+ FC_FST_TIME = 0xfb, /* time service */ -+ FC_FST_DIR = 0xfc, /* directory service */ -+}; -+ -+/* -+ * ct_cmd: Command / response codes -+ */ -+enum fc_ct_cmd { -+ FC_FS_RJT = 0x8001, /* reject */ -+ FC_FS_ACC = 0x8002, /* accept */ -+}; -+ -+/* -+ * FS_RJT reason codes. -+ */ -+enum fc_ct_reason { -+ FC_FS_RJT_CMD = 0x01, /* invalid command code */ -+ FC_FS_RJT_VER = 0x02, /* invalid version level */ -+ FC_FS_RJT_LOG = 0x03, /* logical error */ -+ FC_FS_RJT_IUSIZ = 0x04, /* invalid IU size */ -+ FC_FS_RJT_BSY = 0x05, /* logical busy */ -+ FC_FS_RJT_PROTO = 0x07, /* protocol error */ -+ FC_FS_RJT_UNABL = 0x09, /* unable to perform command request */ -+ FC_FS_RJT_UNSUP = 0x0b, /* command not supported */ -+}; -+ -+/* -+ * FS_RJT reason code explanations. -+ */ -+enum fc_ct_explan { -+ FC_FS_EXP_NONE = 0x00, /* no additional explanation */ -+ FC_FS_EXP_PID = 0x01, /* port ID not registered */ -+ FC_FS_EXP_PNAM = 0x02, /* port name not registered */ -+ FC_FS_EXP_NNAM = 0x03, /* node name not registered */ -+ FC_FS_EXP_COS = 0x04, /* class of service not registered */ -+ FC_FS_EXP_FTNR = 0x07, /* FC-4 types not registered */ -+ /* definitions not complete */ -+}; -+ -+#endif /* _FC_GS_H_ */ -diff -Naurd fcoe-utils-1.0.14.orig/include/fc_ns.h fcoe-utils-1.0.14/include/fc_ns.h ---- fcoe-utils-1.0.14.orig/include/fc_ns.h 1970-01-01 01:00:00.000000000 +0100 -+++ fcoe-utils-1.0.14/include/fc_ns.h 2011-02-23 15:05:18.305426345 +0100 -@@ -0,0 +1,192 @@ -+/* -+ * Copyright(c) 2007 Intel Corporation. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms and conditions of the GNU General Public License, -+ * version 2, as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ * You should have received a copy of the GNU General Public License along with -+ * this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Maintained at www.Open-FCoE.org -+ */ -+ -+#ifndef _FC_NS_H_ -+#define _FC_NS_H_ -+ -+#include -+ -+/* -+ * Fibre Channel Services - Name Service (dNS) -+ * From T11.org FC-GS-2 Rev 5.3 November 1998. -+ */ -+ -+/* -+ * Common-transport sub-type for Name Server. -+ */ -+#define FC_NS_SUBTYPE 2 /* fs_ct_hdr.ct_fs_subtype */ -+ -+/* -+ * Name server Requests. -+ * Note: this is an incomplete list, some unused requests are omitted. -+ */ -+enum fc_ns_req { -+ FC_NS_GA_NXT = 0x0100, /* get all next */ -+ FC_NS_GI_A = 0x0101, /* get identifiers - scope */ -+ FC_NS_GPN_ID = 0x0112, /* get port name by ID */ -+ FC_NS_GNN_ID = 0x0113, /* get node name by ID */ -+ FC_NS_GID_PN = 0x0121, /* get ID for port name */ -+ FC_NS_GID_NN = 0x0131, /* get IDs for node name */ -+ FC_NS_GID_FT = 0x0171, /* get IDs by FC4 type */ -+ FC_NS_GPN_FT = 0x0172, /* get port names by FC4 type */ -+ FC_NS_GID_PT = 0x01a1, /* get IDs by port type */ -+ FC_NS_RPN_ID = 0x0212, /* reg port name for ID */ -+ FC_NS_RNN_ID = 0x0213, /* reg node name for ID */ -+ FC_NS_RFT_ID = 0x0217, /* reg FC4 type for ID */ -+ FC_NS_RSPN_ID = 0x0218, /* reg symbolic port name */ -+ FC_NS_RFF_ID = 0x021f, /* reg FC4 Features for ID */ -+ FC_NS_RSNN_NN = 0x0239, /* reg symbolic node name */ -+}; -+ -+/* -+ * Port type values. -+ */ -+enum fc_ns_pt { -+ FC_NS_UNID_PORT = 0x00, /* unidentified */ -+ FC_NS_N_PORT = 0x01, /* N port */ -+ FC_NS_NL_PORT = 0x02, /* NL port */ -+ FC_NS_FNL_PORT = 0x03, /* F/NL port */ -+ FC_NS_NX_PORT = 0x7f, /* Nx port */ -+ FC_NS_F_PORT = 0x81, /* F port */ -+ FC_NS_FL_PORT = 0x82, /* FL port */ -+ FC_NS_E_PORT = 0x84, /* E port */ -+ FC_NS_B_PORT = 0x85, /* B port */ -+}; -+ -+/* -+ * Port type object. -+ */ -+struct fc_ns_pt_obj { -+ __u8 pt_type; -+}; -+ -+/* -+ * Port ID object -+ */ -+struct fc_ns_fid { -+ __u8 fp_flags; /* flags for responses only */ -+ __u8 fp_fid[3]; -+}; -+ -+/* -+ * fp_flags in port ID object, for responses only. -+ */ -+#define FC_NS_FID_LAST 0x80 /* last object */ -+ -+/* -+ * FC4-types object. -+ */ -+#define FC_NS_TYPES 256 /* number of possible FC-4 types */ -+#define FC_NS_BPW 32 /* bits per word in bitmap */ -+ -+struct fc_ns_fts { -+ __be32 ff_type_map[FC_NS_TYPES / FC_NS_BPW]; /* bitmap of FC-4 types */ -+}; -+ -+/* -+ * GID_PT request. -+ */ -+struct fc_ns_gid_pt { -+ __u8 fn_pt_type; -+ __u8 fn_domain_id_scope; -+ __u8 fn_area_id_scope; -+ __u8 fn_resvd; -+}; -+ -+/* -+ * GID_FT or GPN_FT request. -+ */ -+struct fc_ns_gid_ft { -+ __u8 fn_resvd; -+ __u8 fn_domain_id_scope; -+ __u8 fn_area_id_scope; -+ __u8 fn_fc4_type; -+}; -+ -+/* -+ * GPN_FT response. -+ */ -+struct fc_gpn_ft_resp { -+ __u8 fp_flags; /* see fp_flags definitions above */ -+ __u8 fp_fid[3]; /* port ID */ -+ __be32 fp_resvd; -+ __be64 fp_wwpn; /* port name */ -+}; -+ -+/* -+ * GID_PN request -+ */ -+struct fc_ns_gid_pn { -+ __be64 fn_wwpn; /* port name */ -+}; -+ -+/* -+ * GID_PN response -+ */ -+struct fc_gid_pn_resp { -+ __u8 fp_resvd; -+ __u8 fp_fid[3]; /* port ID */ -+}; -+ -+/* -+ * RFT_ID request - register FC-4 types for ID. -+ */ -+struct fc_ns_rft_id { -+ struct fc_ns_fid fr_fid; /* port ID object */ -+ struct fc_ns_fts fr_fts; /* FC-4 types object */ -+}; -+ -+/* -+ * RPN_ID request - register port name for ID. -+ * RNN_ID request - register node name for ID. -+ */ -+struct fc_ns_rn_id { -+ struct fc_ns_fid fr_fid; /* port ID object */ -+ __be64 fr_wwn; /* node name or port name */ -+} __attribute__((__packed__)); -+ -+/* -+ * RSNN_NN request - register symbolic node name -+ */ -+struct fc_ns_rsnn { -+ __be64 fr_wwn; /* node name */ -+ __u8 fr_name_len; -+ char fr_name[]; -+} __attribute__((__packed__)); -+ -+/* -+ * RSPN_ID request - register symbolic port name -+ */ -+struct fc_ns_rspn { -+ struct fc_ns_fid fr_fid; /* port ID object */ -+ __u8 fr_name_len; -+ char fr_name[]; -+} __attribute__((__packed__)); -+ -+/* -+ * RFF_ID request - register FC-4 Features for ID. -+ */ -+struct fc_ns_rff_id { -+ struct fc_ns_fid fr_fid; /* port ID object */ -+ __u8 fr_resvd[2]; -+ __u8 fr_feat; /* FC-4 Feature bits */ -+ __u8 fr_type; /* FC-4 type */ -+} __attribute__((__packed__)); -+ -+#endif /* _FC_NS_H_ */ -diff -Naurd fcoe-utils-1.0.14.orig/include/scsi_bsg_fc.h fcoe-utils-1.0.14/include/scsi_bsg_fc.h ---- fcoe-utils-1.0.14.orig/include/scsi_bsg_fc.h 1970-01-01 01:00:00.000000000 +0100 -+++ fcoe-utils-1.0.14/include/scsi_bsg_fc.h 2011-02-23 15:05:18.310052287 +0100 -@@ -0,0 +1,322 @@ -+/* -+ * FC Transport BSG Interface -+ * -+ * Copyright (C) 2008 James Smart, Emulex Corporation -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ */ -+ -+#ifndef SCSI_BSG_FC_H -+#define SCSI_BSG_FC_H -+ -+/* -+ * This file intended to be included by both kernel and user space -+ */ -+ -+#include -+ -+/* -+ * FC Transport SGIO v4 BSG Message Support -+ */ -+ -+/* Default BSG request timeout (in seconds) */ -+#define FC_DEFAULT_BSG_TIMEOUT (10 * HZ) -+ -+ -+/* -+ * Request Message Codes supported by the FC Transport -+ */ -+ -+/* define the class masks for the message codes */ -+#define FC_BSG_CLS_MASK 0xF0000000 /* find object class */ -+#define FC_BSG_HST_MASK 0x80000000 /* fc host class */ -+#define FC_BSG_RPT_MASK 0x40000000 /* fc rport class */ -+ -+ /* fc_host Message Codes */ -+#define FC_BSG_HST_ADD_RPORT (FC_BSG_HST_MASK | 0x00000001) -+#define FC_BSG_HST_DEL_RPORT (FC_BSG_HST_MASK | 0x00000002) -+#define FC_BSG_HST_ELS_NOLOGIN (FC_BSG_HST_MASK | 0x00000003) -+#define FC_BSG_HST_CT (FC_BSG_HST_MASK | 0x00000004) -+#define FC_BSG_HST_VENDOR (FC_BSG_HST_MASK | 0x000000FF) -+ -+ /* fc_rport Message Codes */ -+#define FC_BSG_RPT_ELS (FC_BSG_RPT_MASK | 0x00000001) -+#define FC_BSG_RPT_CT (FC_BSG_RPT_MASK | 0x00000002) -+ -+ -+ -+/* -+ * FC Address Identifiers in Message Structures : -+ * -+ * Whenever a command payload contains a FC Address Identifier -+ * (aka port_id), the value is effectively in big-endian -+ * order, thus the array elements are decoded as follows: -+ * element [0] is bits 23:16 of the FC Address Identifier -+ * element [1] is bits 15:8 of the FC Address Identifier -+ * element [2] is bits 7:0 of the FC Address Identifier -+ */ -+ -+ -+/* -+ * FC Host Messages -+ */ -+ -+/* FC_BSG_HST_ADDR_PORT : */ -+ -+/* Request: -+ * This message requests the FC host to login to the remote port -+ * at the specified N_Port_Id. The remote port is to be enumerated -+ * with the transport upon completion of the login. -+ */ -+struct fc_bsg_host_add_rport { -+ uint8_t reserved; -+ -+ /* FC Address Identier of the remote port to login to */ -+ uint8_t port_id[3]; -+}; -+ -+/* Response: -+ * There is no additional response data - fc_bsg_reply->result is sufficient -+ */ -+ -+ -+/* FC_BSG_HST_DEL_RPORT : */ -+ -+/* Request: -+ * This message requests the FC host to remove an enumerated -+ * remote port and to terminate the login to it. -+ * -+ * Note: The driver is free to reject this request if it desires to -+ * remain logged in with the remote port. -+ */ -+struct fc_bsg_host_del_rport { -+ uint8_t reserved; -+ -+ /* FC Address Identier of the remote port to logout of */ -+ uint8_t port_id[3]; -+}; -+ -+/* Response: -+ * There is no additional response data - fc_bsg_reply->result is sufficient -+ */ -+ -+ -+/* FC_BSG_HST_ELS_NOLOGIN : */ -+ -+/* Request: -+ * This message requests the FC_Host to send an ELS to a specific -+ * N_Port_ID. The host does not need to log into the remote port, -+ * nor does it need to enumerate the rport for further traffic -+ * (although, the FC host is free to do so if it desires). -+ */ -+struct fc_bsg_host_els { -+ /* -+ * ELS Command Code being sent (must be the same as byte 0 -+ * of the payload) -+ */ -+ uint8_t command_code; -+ -+ /* FC Address Identier of the remote port to send the ELS to */ -+ uint8_t port_id[3]; -+}; -+ -+/* Response: -+ */ -+/* fc_bsg_ctels_reply->status values */ -+#define FC_CTELS_STATUS_OK 0x00000000 -+#define FC_CTELS_STATUS_REJECT 0x00000001 -+#define FC_CTELS_STATUS_P_RJT 0x00000002 -+#define FC_CTELS_STATUS_F_RJT 0x00000003 -+#define FC_CTELS_STATUS_P_BSY 0x00000004 -+#define FC_CTELS_STATUS_F_BSY 0x00000006 -+struct fc_bsg_ctels_reply { -+ /* -+ * Note: An ELS LS_RJT may be reported in 2 ways: -+ * a) A status of FC_CTELS_STATUS_OK is returned. The caller -+ * is to look into the ELS receive payload to determine -+ * LS_ACC or LS_RJT (by contents of word 0). The reject -+ * data will be in word 1. -+ * b) A status of FC_CTELS_STATUS_REJECT is returned, The -+ * rjt_data field will contain valid data. -+ * -+ * Note: ELS LS_ACC is determined by an FC_CTELS_STATUS_OK, and -+ * the receive payload word 0 indicates LS_ACC -+ * (e.g. value is 0x02xxxxxx). -+ * -+ * Note: Similarly, a CT Reject may be reported in 2 ways: -+ * a) A status of FC_CTELS_STATUS_OK is returned. The caller -+ * is to look into the CT receive payload to determine -+ * Accept or Reject (by contents of word 2). The reject -+ * data will be in word 3. -+ * b) A status of FC_CTELS_STATUS_REJECT is returned, The -+ * rjt_data field will contain valid data. -+ * -+ * Note: x_RJT/BSY status will indicae that the rjt_data field -+ * is valid and contains the reason/explanation values. -+ */ -+ uint32_t status; /* See FC_CTELS_STATUS_xxx */ -+ -+ /* valid if status is not FC_CTELS_STATUS_OK */ -+ struct { -+ uint8_t action; /* fragment_id for CT REJECT */ -+ uint8_t reason_code; -+ uint8_t reason_explanation; -+ uint8_t vendor_unique; -+ } rjt_data; -+}; -+ -+ -+/* FC_BSG_HST_CT : */ -+ -+/* Request: -+ * This message requests that a CT Request be performed with the -+ * indicated N_Port_ID. The driver is responsible for logging in with -+ * the fabric and/or N_Port_ID, etc as per FC rules. This request does -+ * not mandate that the driver must enumerate the destination in the -+ * transport. The driver is allowed to decide whether to enumerate it, -+ * and whether to tear it down after the request. -+ */ -+struct fc_bsg_host_ct { -+ uint8_t reserved; -+ -+ /* FC Address Identier of the remote port to send the ELS to */ -+ uint8_t port_id[3]; -+ -+ /* -+ * We need words 0-2 of the generic preamble for the LLD's -+ */ -+ uint32_t preamble_word0; /* revision & IN_ID */ -+ uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ -+ uint32_t preamble_word2; /* Cmd Code, Max Size */ -+ -+}; -+/* Response: -+ * -+ * The reply structure is an fc_bsg_ctels_reply structure -+ */ -+ -+ -+/* FC_BSG_HST_VENDOR : */ -+ -+/* Request: -+ * Note: When specifying vendor_id, be sure to read the Vendor Type and ID -+ * formatting requirements specified in scsi_netlink.h -+ */ -+struct fc_bsg_host_vendor { -+ /* -+ * Identifies the vendor that the message is formatted for. This -+ * should be the recipient of the message. -+ */ -+ uint64_t vendor_id; -+ -+ /* start of vendor command area */ -+ uint32_t vendor_cmd[0]; -+}; -+ -+/* Response: -+ */ -+struct fc_bsg_host_vendor_reply { -+ /* start of vendor response area */ -+ uint32_t vendor_rsp[0]; -+}; -+ -+ -+ -+/* -+ * FC Remote Port Messages -+ */ -+ -+/* FC_BSG_RPT_ELS : */ -+ -+/* Request: -+ * This message requests that an ELS be performed with the rport. -+ */ -+struct fc_bsg_rport_els { -+ /* -+ * ELS Command Code being sent (must be the same as -+ * byte 0 of the payload) -+ */ -+ uint8_t els_code; -+}; -+ -+/* Response: -+ * -+ * The reply structure is an fc_bsg_ctels_reply structure -+ */ -+ -+ -+/* FC_BSG_RPT_CT : */ -+ -+/* Request: -+ * This message requests that a CT Request be performed with the rport. -+ */ -+struct fc_bsg_rport_ct { -+ /* -+ * We need words 0-2 of the generic preamble for the LLD's -+ */ -+ uint32_t preamble_word0; /* revision & IN_ID */ -+ uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ -+ uint32_t preamble_word2; /* Cmd Code, Max Size */ -+}; -+/* Response: -+ * -+ * The reply structure is an fc_bsg_ctels_reply structure -+ */ -+ -+ -+ -+ -+/* request (CDB) structure of the sg_io_v4 */ -+struct fc_bsg_request { -+ uint32_t msgcode; -+ union { -+ struct fc_bsg_host_add_rport h_addrport; -+ struct fc_bsg_host_del_rport h_delrport; -+ struct fc_bsg_host_els h_els; -+ struct fc_bsg_host_ct h_ct; -+ struct fc_bsg_host_vendor h_vendor; -+ -+ struct fc_bsg_rport_els r_els; -+ struct fc_bsg_rport_ct r_ct; -+ } rqst_data; -+} __attribute__((packed)); -+ -+ -+/* response (request sense data) structure of the sg_io_v4 */ -+struct fc_bsg_reply { -+ /* -+ * The completion result. Result exists in two forms: -+ * if negative, it is an -Exxx system errno value. There will -+ * be no further reply information supplied. -+ * else, it's the 4-byte scsi error result, with driver, host, -+ * msg and status fields. The per-msgcode reply structure -+ * will contain valid data. -+ */ -+ uint32_t result; -+ -+ /* If there was reply_payload, how much was recevied ? */ -+ uint32_t reply_payload_rcv_len; -+ -+ union { -+ struct fc_bsg_host_vendor_reply vendor_reply; -+ -+ struct fc_bsg_ctels_reply ctels_reply; -+ } reply_data; -+}; -+ -+ -+#endif /* SCSI_BSG_FC_H */ -+ diff --git a/fcoe-utils-1.0.12-makefile-data-hook.patch b/fcoe-utils-1.0.12-makefile-data-hook.patch deleted file mode 100644 index a7cfab7..0000000 --- a/fcoe-utils-1.0.12-makefile-data-hook.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- fcoe-utils-1.0.12/Makefile.am.orig 2010-03-15 17:02:19.000000000 +0100 -+++ fcoe-utils-1.0.12/Makefile.am 2010-03-15 17:02:34.000000000 +0100 -@@ -62,8 +62,3 @@ - init_d_SCRIPTS = etc/initd/fcoe - - dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec etc/config -- --install-data-hook: -- if [ ! -f ${DESTDIR}${fcoe_configdir}/config ] ; then \ -- cp ${srcdir}/etc/config ${DESTDIR}${fcoe_configdir}/config; \ -- fi diff --git a/fcoe-utils-1.0.14-no-vconfig.patch b/fcoe-utils-1.0.14-no-vconfig.patch deleted file mode 100644 index 7767ae4..0000000 --- a/fcoe-utils-1.0.14-no-vconfig.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- fcoe-utils-1.0.14/contrib/fcoe-setup.sh 2010-05-18 23:50:48.000000000 +0200 -+++ fcoe-utils-1.0.14/contrib/fcoe-setup.sh.new 2010-11-30 17:24:07.839269545 +0100 -@@ -24,9 +24,8 @@ - vif=$(scan_vlan $ifname $vlan) - - if [ -z "$vif" ] ; then -- vconfig set_name_type DEV_PLUS_VID_NO_PAD -- vconfig add $ifname $vlan > /dev/null - vif="$ifname.$vlan" -+ ip link add dev $vif link $ifname type vlan id $vlan - fi - ip link set $vif up - echo "$vif" diff --git a/fcoe-utils-1.0.17-init.patch b/fcoe-utils-1.0.17-init.patch new file mode 100644 index 0000000..8ef89b0 --- /dev/null +++ b/fcoe-utils-1.0.17-init.patch @@ -0,0 +1,118 @@ +--- fcoe-utils-1.0.17/etc/initd/initd.fedora 2011-01-15 01:28:10.000000000 +0100 ++++ fcoe-utils-1.0.17/etc/initd/initd.fedora.new 2011-02-04 10:54:50.152483041 +0100 +@@ -15,7 +15,7 @@ + # this program; if not, write to the Free Software Foundation, Inc., + # 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + # +-# chkconfig: - 21 80 ++# chkconfig: 2345 21 80 + # + # Maintained at www.Open-FCoE.org + +@@ -23,7 +23,7 @@ + # Provides: fcoe + # Required-Start: network + # Required-Stop: +-# Default-Start: ++# Default-Start: 2 3 4 5 + # Default-Stop: + # Short-Description: Open-FCoE Initiator + # Description: Open-FCoE Initiator +--- fcoe-utils-1.0.17/etc/initd/initd.fedora 2011-02-04 11:06:42.251483139 +0100 ++++ fcoe-utils-1.0.17/etc/initd/initd.fedora.new 2011-02-04 11:35:26.779482986 +0100 +@@ -63,6 +63,16 @@ + fi + } + ++have_fcoe_root() { ++ # This simply checks if root is on a net device ++ local rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab) ++ if [[ "$rootopts" =~ "_netdev" ]]; then ++ return 0 ++ else ++ return 1 ++ fi ++} ++ + start() + { + echo -n $"Starting FCoE initiator service: " +@@ -80,22 +90,27 @@ + + stop() + { +- local force=$1 +- +- pid=$(pidof "$FCOEMON") +- if [ "$force" == "force" ] +- then +- action "Destroying any active fcoe interface/s" +- [ "$pid" ] && kill -HUP $pid ++ if have_fcoe_root; then ++ echo $"Possible FCoE root detected, not stopping FCoE." ++ exit 1 + else +- [ "$pid" ] && kill -TERM $pid +- fi ++ local force=$1 + +- action $"Stopping FCoE initiator service: " +- +- rm -f /var/run/fcoemon.* +- rm -f /tmp/fcoemon.dcbd.* +- rm -f /var/lock/subsys/fcoe ++ pid=$(pidof "$FCOEMON") ++ if [ "$force" == "force" ] ++ then ++ action "Destroying any active fcoe interface/s" ++ [ "$pid" ] && kill -HUP $pid ++ else ++ [ "$pid" ] && kill -TERM $pid ++ fi ++ ++ action $"Stopping FCoE initiator service: " ++ ++ rm -f /var/run/fcoemon.* ++ rm -f /tmp/fcoemon.dcbd.* ++ rm -f /var/lock/subsys/fcoe ++ fi + } + + status() +--- fcoe-utils-1.0.17/etc/initd/initd.fedora 2011-02-04 11:52:53.990483140 +0100 ++++ fcoe-utils-1.0.17/etc/initd/initd.fedora.new 2011-02-04 12:46:03.401482934 +0100 +@@ -85,6 +85,34 @@ + echo + touch /var/lock/subsys/fcoe + ++ # Wait for the _netdev devices ++ if [ "$WAIT_TIMEOUT" = "" ]; then ++ WAIT_TIMEOUT=65 ++ fi ++ local donewait=1 ++ local devs=($(egrep 'by-path\/fc-.*_netdev' /etc/fstab | cut -d ' ' -f1)) ++ if [ "$devs" != "" ]; then ++ echo -n "Waiting for FCoE devices . " ++ while [ $WAIT_TIMEOUT -gt 0 ]; do ++ for disk in ${devs[*]}; do ++ if ! test -b $disk; then ++ donewait=0 ++ break ++ fi ++ done ++ test $donewait -eq 1 && break; ++ sleep 1 ++ echo -n ". " ++ donewait=1 ++ WAIT_TIMEOUT=$(($WAIT_TIMEOUT-1)) ++ done ++ if [ "$WAIT_TIMEOUT" -eq 0 ]; then ++ echo "timed out!" ++ else ++ echo "done!" ++ fi ++ fi ++ + echo + } + diff --git a/fcoe-utils-1.0.17-make.patch b/fcoe-utils-1.0.17-make.patch new file mode 100644 index 0000000..9c82334 --- /dev/null +++ b/fcoe-utils-1.0.17-make.patch @@ -0,0 +1,22 @@ +--- fcoe-utils-1.0.17/Makefile.am 2011-01-15 01:28:10.000000000 +0100 ++++ fcoe-utils-1.0.17/Makefile.am.new 2011-02-04 10:59:25.579483545 +0100 +@@ -2,7 +2,7 @@ + sbin_PROGRAMS = fcoeadm fcoemon fcping fipvlan fcnsq fcrls + + ## all targets should look for headers in the include directory +-AM_CPPFLAGS = -I${srcdir}/include -I${builddir}/include ++AM_CPPFLAGS = -I${srcdir}/include -I${builddir}/include -I/lib/modules/`rpm -q --list kernel | grep "^/lib/modules/.*/build$$" | cut -f4 -d"/" | sort -r | head -1`/build/include + ## pass the sysconfdir into the C proprocessor + AM_CPPFLAGS += -DSYSCONFDIR="\"${sysconfdir}\"" + AM_CFLAGS = -Wall +--- fcoe-utils-1.0.17/Makefile.am 2011-02-04 11:06:42.253483139 +0100 ++++ fcoe-utils-1.0.17/Makefile.am.new 2011-02-04 11:06:59.956483271 +0100 +@@ -65,8 +65,3 @@ + init_d_SCRIPTS = etc/initd/fcoe + + dist_noinst_DATA = README COPYING INSTALL fcoe-utils.spec etc/config +- +-install-data-hook: +- if [ ! -f ${DESTDIR}${fcoe_configdir}/config ] ; then \ +- cp ${srcdir}/etc/config ${DESTDIR}${fcoe_configdir}/config; \ +- fi diff --git a/fcoe-utils-1.0.17-manpages.patch b/fcoe-utils-1.0.17-manpages.patch new file mode 100644 index 0000000..9c60b19 --- /dev/null +++ b/fcoe-utils-1.0.17-manpages.patch @@ -0,0 +1,59 @@ +--- fcoe-utils-1.0.17/doc/fcoeadm.txt 2011-01-15 01:28:10.000000000 +0100 ++++ fcoe-utils-1.0.17/doc/fcoeadm.txt.new 2011-02-04 11:46:24.217483236 +0100 +@@ -25,6 +25,8 @@ + + *fcoeadm* -r|--reset _ethX_ + ++*fcoeadm* -S|--Scan _ethX_ ++ + *fcoeadm* -i|--interface [_ethX_] + + *fcoeadm* -t|--target [_ethX_] +@@ -64,6 +66,9 @@ + *-r*, *--reset* _ethX_:: + Resets the FCoE instance on the specified network interface. + ++*-S*, *--Scan* _ethX_:: ++ Validates that the interface name has an active FCoE session. ++ + *-i*, *--interface* [_ethX_]:: + Show information about the FCoE instance on the specified network + interface, or all FCoE instances if no network interface is specified. +--- fcoe-utils-1.0.17/doc/fcoeadm.8 2011-01-15 01:28:10.000000000 +0100 ++++ fcoe-utils-1.0.17/doc/fcoeadm.8.new 2011-02-04 11:50:48.400482913 +0100 +@@ -2,12 +2,12 @@ + .\" Title: fcoeadm + .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] + .\" Generator: DocBook XSL Stylesheets v1.75.2 +-.\" Date: 04/29/2010 ++.\" Date: 02/04/2011 + .\" Manual: Open-FCoE Tools + .\" Source: Open-FCoE + .\" Language: English + .\" +-.TH "FCOEADM" "8" "04/29/2010" "Open\-FCoE" "Open\-FCoE Tools" ++.TH "FCOEADM" "8" "02/04/2011" "Open\-FCoE" "Open\-FCoE Tools" + .\" ----------------------------------------------------------------- + .\" * set default formatting + .\" ----------------------------------------------------------------- +@@ -26,6 +26,8 @@ + .sp + \fBfcoeadm\fR \-r|\-\-reset \fIethX\fR + .sp ++\fBfcoeadm\fR \-S|\-\-Scan \fIethX\fR ++.sp + \fBfcoeadm\fR \-i|\-\-interface [\fIethX\fR] + .sp + \fBfcoeadm\fR \-t|\-\-target [\fIethX\fR] +@@ -60,6 +62,11 @@ + Resets the FCoE instance on the specified network interface\&. + .RE + .PP ++\fB\-S\fR, \fB\-\-Scan\fR \fIethX\fR ++.RS 4 ++Validates that the interface name has an active FCoE session\&. ++.RE ++.PP + \fB\-i\fR, \fB\-\-interface\fR [\fIethX\fR] + .RS 4 + Show information about the FCoE instance on the specified network interface, or all FCoE instances if no network interface is specified\&. diff --git a/fcoe-utils-1.0.17-no-vconfig.patch b/fcoe-utils-1.0.17-no-vconfig.patch new file mode 100644 index 0000000..6973da5 --- /dev/null +++ b/fcoe-utils-1.0.17-no-vconfig.patch @@ -0,0 +1,14 @@ +--- fcoe-utils-1.0.17/contrib/fcoe-setup.sh 2011-01-15 01:28:10.000000000 +0100 ++++ fcoe-utils-1.0.17/contrib/fcoe-setup.sh.new 2011-02-04 12:52:13.873482656 +0100 +@@ -24,9 +24,8 @@ + vif=$(scan_vlan $ifname $vlan) + + if [ -z "$vif" ] ; then +- vconfig set_name_type DEV_PLUS_VID_NO_PAD +- vconfig add $ifname $vlan > /dev/null +- vif="$ifname.$vlan" ++ vif="$ifname.$vlan" ++ ip link add dev $vif link $ifname type vlan id $vlan + fi + ip link set $vif up + echo "$vif" diff --git a/fcoe-utils-1.0.18-config.patch b/fcoe-utils-1.0.18-config.patch new file mode 100644 index 0000000..4c5ec66 --- /dev/null +++ b/fcoe-utils-1.0.18-config.patch @@ -0,0 +1,13 @@ +diff --git a/etc/config b/etc/config +index c993f35..bfccf8c 100644 +--- a/etc/config ++++ b/etc/config +@@ -12,3 +12,8 @@ USE_SYSLOG="yes" + ## Default: list of default drivers + # All supported drivers listed here are loaded when service starts + SUPPORTED_DRIVERS="fcoe bnx2fc" ++ ++## Type: integer ++## Default: 65 ++# Wait at most for this amount of seconds to discover all _netdev fstab devices ++WAIT_TIMEOUT="65" diff --git a/fcoe-utils-1.0.18-fcoe-utils-Add-SUPPORTED_DRIVERS-field-to-config.patch b/fcoe-utils-1.0.18-fcoe-utils-Add-SUPPORTED_DRIVERS-field-to-config.patch new file mode 100644 index 0000000..799ed0e --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Add-SUPPORTED_DRIVERS-field-to-config.patch @@ -0,0 +1,76 @@ +From fabcf9389e79c3535a58b5dc30632d444cb513f6 Mon Sep 17 00:00:00 2001 +From: Nithin Sujir +Date: Thu, 27 Jan 2011 04:12:08 +0000 +Subject: [PATCH 02/16] fcoe-utils: Add SUPPORTED_DRIVERS field to config + +SUPPORTED_DRIVERS is a space separated string field added to the config +file. The fcoe service will use this field instead of the previous +hardcoded "fcoe" to modprobe during startup. + +Signed-off-by: Nithin Nayak Sujir +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + doc/fcoemon.txt | 5 +++-- + etc/config | 4 ++++ + etc/initd/initd.fedora | 2 +- + etc/initd/initd.suse | 2 +- + 4 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/doc/fcoemon.txt b/doc/fcoemon.txt +index f42c8c0..117b2d0 100644 +--- a/doc/fcoemon.txt ++++ b/doc/fcoemon.txt +@@ -159,8 +159,9 @@ default options in this file are: *DEBUG="no"* and *USE_SYSLOG="yes"*. The + former is used to enable debugging messages from the fcoe service script + and *fcoemon* (via the *--debug* option). The latter is to indicate if the + log messages are to be output to the system log (via the *--syslog* +-option). Any changes to this file will require a restart of the *fcoe* +-service. ++option). *SUPPORTED_DRIVERS* is the list of drivers to automatically load ++during fcoe service start. Any changes to this file will require a restart ++of the *fcoe* service. + + /etc/fcoe/cfg- + ~~~~~~~~~~~~~~~~~~~~~~ +diff --git a/etc/config b/etc/config +index 2d08c9e..c993f35 100644 +--- a/etc/config ++++ b/etc/config +@@ -8,3 +8,7 @@ DEBUG="no" + # All the messages go to syslog and stderr (script & C code) + USE_SYSLOG="yes" + ++## Type: string. Driver names separated by space ++## Default: list of default drivers ++# All supported drivers listed here are loaded when service starts ++SUPPORTED_DRIVERS="fcoe bnx2fc" +diff --git a/etc/initd/initd.fedora b/etc/initd/initd.fedora +index 3888dda..6a791cd 100755 +--- a/etc/initd/initd.fedora ++++ b/etc/initd/initd.fedora +@@ -68,7 +68,7 @@ start() + echo -n $"Starting FCoE initiator service: " + + modprobe -q libfc +- modprobe -q fcoe ++ modprobe -q -a $SUPPORTED_DRIVERS + + daemon --pidfile ${PID_FILE} ${FCOEMON} ${FCOEMON_OPTS} + +diff --git a/etc/initd/initd.suse b/etc/initd/initd.suse +index 139de2d..638eae5 100755 +--- a/etc/initd/initd.suse ++++ b/etc/initd/initd.suse +@@ -82,7 +82,7 @@ test -x $FCOEMON || { + + startup_fcoe_modules() + { +- modprobe fcoe > /dev/null 2>&1 ++ modprobe -a $SUPPORTED_DRIVERS > /dev/null 2>&1 + } + + start() +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Add-libnl-build-dependency-for-fcoe-utils.patch b/fcoe-utils-1.0.18-fcoe-utils-Add-libnl-build-dependency-for-fcoe-utils.patch new file mode 100644 index 0000000..8768d7f --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Add-libnl-build-dependency-for-fcoe-utils.patch @@ -0,0 +1,30 @@ +From 12acb3a16b13e96b0ac604540aaf0148dffceb74 Mon Sep 17 00:00:00 2001 +From: Ross Brattain +Date: Wed, 13 Apr 2011 03:51:59 +0000 +Subject: [PATCH 07/16] fcoe-utils: Add libnl build dependency for fcoe-utils + to QUICKSTART document. + +fcoemon uses the header from libnl. + +Signed-off-by: Ross Brattain +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + QUICKSTART | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/QUICKSTART b/QUICKSTART +index 5183803..abe6cf2 100644 +--- a/QUICKSTART ++++ b/QUICKSTART +@@ -176,6 +176,7 @@ PROCESS + + DEPENDENCIES + ++* libnl (see DCB section) + * libhbalinux + * lldpad v0.9.26 or greater (optional configure flag to build without) + +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Avoid-freeing-uninitialized-pointer-in-fc.patch b/fcoe-utils-1.0.18-fcoe-utils-Avoid-freeing-uninitialized-pointer-in-fc.patch new file mode 100644 index 0000000..b1fea6a --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Avoid-freeing-uninitialized-pointer-in-fc.patch @@ -0,0 +1,49 @@ +From 8f4092733b9b3ba815597e67fc20c9e1897803e5 Mon Sep 17 00:00:00 2001 +From: Petr Sabata +Date: Fri, 1 Apr 2011 00:21:34 +0000 +Subject: [PATCH 16/16] fcoe-utils: Avoid freeing uninitialized pointer in + fcoe_find_fchost() + +Currently, running fcoeadm -i when SYSFS_FCHOST path isn't available results +in fcoeadm crash. This patch checks for this and frees namelist only if it's +been initialized. + +Signed-off-by: Petr Sabata +Signed-off-by: Robert Love +--- + lib/fcoe_utils.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/lib/fcoe_utils.c b/lib/fcoe_utils.c +index 142b045..d54cd4d 100644 +--- a/lib/fcoe_utils.c ++++ b/lib/fcoe_utils.c +@@ -67,11 +67,11 @@ static int fcoe_check_fchost(const char *ifname, const char *dname) + + enum fcoe_status fcoe_find_fchost(char *ifname, char *fchost, int len) + { +- int n, dname_len; ++ int n, dname_len, status; + struct dirent **namelist; + int rc = ENOFCOECONN; + +- n = scandir(SYSFS_FCHOST, &namelist, 0, alphasort); ++ status = n = scandir(SYSFS_FCHOST, &namelist, 0, alphasort); + + for (n-- ; n >= 0 ; n--) { + if (rc) { +@@ -94,9 +94,9 @@ enum fcoe_status fcoe_find_fchost(char *ifname, char *fchost, int len) + } + } + free(namelist[n]); +- + } +- free(namelist); ++ if (status >= 0) ++ free(namelist); + + return rc; + } +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Documentation-for-the-fcoeadm-Scan-option.patch b/fcoe-utils-1.0.18-fcoe-utils-Documentation-for-the-fcoeadm-Scan-option.patch new file mode 100644 index 0000000..9056204 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Documentation-for-the-fcoeadm-Scan-option.patch @@ -0,0 +1,54 @@ +From 04943a7ed51fe27fb064990c6d1496c3267eedd3 Mon Sep 17 00:00:00 2001 +From: Petr Sabata +Date: Fri, 1 Apr 2011 00:06:11 +0000 +Subject: [PATCH 13/16] fcoe-utils: Documentation for the fcoeadm -Scan option + and correct long option parsing + +This patch adds a simple description for the fcoeadm -Scan along with the +long option fix. + +Signed-off-by: Petr Sabata +Signed-off-by: Robert Love +--- + doc/fcoeadm.txt | 5 +++++ + fcoeadm.c | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/doc/fcoeadm.txt b/doc/fcoeadm.txt +index 2b1cf0a..2552d4d 100644 +--- a/doc/fcoeadm.txt ++++ b/doc/fcoeadm.txt +@@ -27,6 +27,8 @@ SYNOPSIS + + *fcoeadm* -i|--interface [_ethX_] + ++*fcoeadm* -S|--Scan [_ethX_] ++ + *fcoeadm* -t|--target [_ethX_] + + *fcoeadm* -l|--lun [_ethX_] +@@ -68,6 +70,9 @@ OPTIONS + Show information about the FCoE instance on the specified network + interface, or all FCoE instances if no network interface is specified. + ++*-S*, *--Scan* _ethX_:: ++ Validates that the interface name has an active FCoE session. ++ + *-t*, *--target* [_ethX_]:: + Show information about the discovered targets associated with the + FCoE instance on the specified network interface. +diff --git a/fcoeadm.c b/fcoeadm.c +index 0573d91..3cbff71 100644 +--- a/fcoeadm.c ++++ b/fcoeadm.c +@@ -39,6 +39,7 @@ static struct option fcoeadm_opts[] = { + {"destroy", required_argument, 0, 'd'}, + {"reset", required_argument, 0, 'r'}, + {"interface", no_argument, 0, 'i'}, ++ {"Scan", required_argument, 0, 'S'}, + {"target", no_argument, 0, 't'}, + {"lun", no_argument, 0, 'l'}, + {"stats", no_argument, 0, 's'}, +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Drain-fip-socket-during-creation-to-disca.patch b/fcoe-utils-1.0.18-fcoe-utils-Drain-fip-socket-during-creation-to-disca.patch new file mode 100644 index 0000000..ee5e586 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Drain-fip-socket-during-creation-to-disca.patch @@ -0,0 +1,71 @@ +From d880216b9882eb601e60d2111a97ac1405f3529f Mon Sep 17 00:00:00 2001 +From: Nithin Sujir +Date: Tue, 12 Apr 2011 05:33:05 +0000 +Subject: [PATCH 09/16] fcoe-utils: Drain fip socket during creation to + discard unintended rx packets. + +During fcoe start, fcoemon creates a PF_PACKET,ETH_P_FIP raw socket for +vlan discovery. After the socket() call and before binding to the +desired device interface, the socket receives FIP packets from all +interfaces. This can interfere with VLAN discovery if a discovery packet +on one interface is received on the wrong socket. This patch drains the +socket after binding it to an interface and before adding the fd to +select monitoring. + +Signed-off-by: Nithin Nayak Sujir +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + lib/fip.c | 29 +++++++++++++++++++++++++++++ + 1 files changed, 29 insertions(+), 0 deletions(-) + +diff --git a/lib/fip.c b/lib/fip.c +index f8c8014..20c1082 100644 +--- a/lib/fip.c ++++ b/lib/fip.c +@@ -136,6 +136,28 @@ static void fip_ethhdr(int ifindex, unsigned char *mac, struct ethhdr *eh) + } + + /** ++ * drain_socket - Discard receive packets on a socket ++ */ ++static void drain_socket(int s) ++{ ++ char buf[4096]; ++ struct sockaddr_ll sa; ++ struct iovec iov[] = { ++ { .iov_base = buf, .iov_len = sizeof(buf), }, ++ }; ++ struct msghdr msg = { ++ .msg_name = &sa, ++ .msg_namelen = sizeof(sa), ++ .msg_iov = iov, ++ .msg_iovlen = ARRAY_SIZE(iov), ++ }; ++ ++ while (recvmsg(s, &msg, MSG_DONTWAIT) > 0) { ++ /* Drop the packet */ ++ } ++} ++ ++/** + * fip_socket - create and bind a packet socket for FIP + */ + int fip_socket(int ifindex) +@@ -160,6 +182,13 @@ int fip_socket(int ifindex) + return rc; + } + ++ /* ++ * Drain the packets that were received between socket and bind. We ++ * could've received packets not meant for our interface. This can ++ * interfere with vlan discovery ++ */ ++ drain_socket(s); ++ + return s; + } + +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Handle-more-than-128-adapters-in-fcoeadm-.patch b/fcoe-utils-1.0.18-fcoe-utils-Handle-more-than-128-adapters-in-fcoeadm-.patch new file mode 100644 index 0000000..a202e94 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Handle-more-than-128-adapters-in-fcoeadm-.patch @@ -0,0 +1,463 @@ +From 48677372717fcbfcff17dbcd13441d9049f027e8 Mon Sep 17 00:00:00 2001 +From: Parikh, Neerav +Date: Wed, 9 Mar 2011 08:16:46 +0000 +Subject: [PATCH 03/16] fcoe-utils: Handle more than 128 adapters in fcoeadm + display commands + +Currently fcoeadm only supports 128 adapters for display routines. +It does not handle scenario if there are more than 128 adapters +available on the system. + +This patch removes that limitation and would allow display of more +than 128 adapters using fcoeadm display commands. + +Signed-off-by: Neerav Parikh +Tested-by: Ross Brattain +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + fcoeadm_display.c | 211 ++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 136 insertions(+), 75 deletions(-) + +diff --git a/fcoeadm_display.c b/fcoeadm_display.c +index 6b69148..8f95530 100644 +--- a/fcoeadm_display.c ++++ b/fcoeadm_display.c +@@ -53,9 +53,6 @@ + /* #define TEST_READ_CAP_V1 */ + /* #define TEST_DEV_SERIAL_NO */ + +-/* Maximum number of HBA the display routines support */ +-#define MAX_HBA_COUNT 128 +- + /* Define FC4 Type */ + #define FC_TYPE_FCP 0x08 /* SCSI FCP */ + +@@ -84,6 +81,14 @@ struct hba_name_table { + int displayed; + }; + ++/* ++ * List of HBA objects. ++ */ ++struct hba_name_table_list { ++ int hba_count; ++ struct hba_name_table hba_table[1]; ++}; ++ + struct sa_nameval port_states[] = { + { "Not Present", HBA_PORTSTATE_UNKNOWN }, + { "Online", HBA_PORTSTATE_ONLINE }, +@@ -1040,17 +1045,18 @@ show_port_stats_in_row(HBA_INT64 start_time, + printf("\n"); + } + +-static void hba_table_destroy(struct hba_name_table *hba_table) ++static void hba_table_list_destroy(struct hba_name_table_list *hba_table_list) + { + int i; + +- /* +- * This is inefficiant as is closes adapter handles +- * (presumedly 0) that weren't open. However, it allows +- * us to avoid maintaining a count. +- */ +- for (i = 0 ; i < MAX_HBA_COUNT ; i++) +- HBA_CloseAdapter(hba_table[i].hba_handle); ++ if (!hba_table_list) ++ return; ++ ++ for (i = 0 ; i < hba_table_list->hba_count ; i++) ++ HBA_CloseAdapter(hba_table_list->hba_table[i].hba_handle); ++ ++ free(hba_table_list); ++ hba_table_list = NULL; + } + + static enum fcoe_status fcoeadm_loadhba() +@@ -1064,19 +1070,14 @@ static enum fcoe_status fcoeadm_loadhba() + /* + * This routine leaves all adapters fd's open. + */ +-static int hba_table_init(struct hba_name_table *hba_table) ++static int hba_table_list_init(struct hba_name_table_list **hba_table_list) + { + HBA_STATUS retval; + char namebuf[1024]; + int i, num_hbas = 0; +- +- /* +- * Initialize the table. +- */ +- for (i = 0 ; i < MAX_HBA_COUNT ; i++) { +- memset(&hba_table[i], 0, +- sizeof(struct hba_name_table)); +- } ++ struct hba_name_table_list *hba_table_list_temp = NULL; ++ struct hba_name_table *hba_table = NULL; ++ int size = 0; + + num_hbas = HBA_GetNumberOfAdapters(); + if (!num_hbas) { +@@ -1084,6 +1085,18 @@ static int hba_table_init(struct hba_name_table *hba_table) + return num_hbas; + } + ++ size = sizeof(struct hba_name_table_list) + \ ++ (num_hbas - 1)*sizeof(struct hba_name_table); ++ ++ hba_table_list_temp = (struct hba_name_table_list *)calloc(1, size); ++ if (!hba_table_list_temp) { ++ fprintf(stderr, ++ "Failure allocating memory.\n"); ++ return -1; ++ } ++ ++ hba_table_list_temp->hba_count = num_hbas; ++ + /* + * Fill out the HBA table. + */ +@@ -1095,19 +1108,20 @@ static int hba_table_init(struct hba_name_table *hba_table) + continue; + } + +- hba_table[i].hba_handle = HBA_OpenAdapter(namebuf); +- if (!hba_table[i].hba_handle) { +- hba_table[i].failed = 1; ++ hba_table = &hba_table_list_temp->hba_table[i]; ++ hba_table->hba_handle = HBA_OpenAdapter(namebuf); ++ if (!hba_table->hba_handle) { ++ hba_table->failed = 1; + fprintf(stderr, "HBA_OpenAdapter failed\n"); + perror("HBA_OpenAdapter"); + continue; + } + +- retval = HBA_GetAdapterAttributes(hba_table[i].hba_handle, +- &hba_table[i].hba_attrs); ++ retval = HBA_GetAdapterAttributes(hba_table->hba_handle, ++ &hba_table->hba_attrs); + if (retval != HBA_STATUS_OK) { +- HBA_CloseAdapter(hba_table[i].hba_handle); +- hba_table[i].failed = 1; ++ HBA_CloseAdapter(hba_table->hba_handle); ++ hba_table->failed = 1; + fprintf(stderr, + "HBA_GetAdapterAttributes failed, retval=%d\n", + retval); +@@ -1115,12 +1129,12 @@ static int hba_table_init(struct hba_name_table *hba_table) + continue; + } + +- retval = HBA_GetAdapterPortAttributes(hba_table[i].hba_handle, ++ retval = HBA_GetAdapterPortAttributes(hba_table->hba_handle, + 0, +- &hba_table[i].port_attrs); ++ &hba_table->port_attrs); + if (retval != HBA_STATUS_OK) { +- HBA_CloseAdapter(hba_table[i].hba_handle); +- hba_table[i].failed = 1; ++ HBA_CloseAdapter(hba_table->hba_handle); ++ hba_table->failed = 1; + fprintf(stderr, + "HBA_GetAdapterPortAttributes failed, " + "retval=%d\n", retval); +@@ -1128,20 +1142,26 @@ static int hba_table_init(struct hba_name_table *hba_table) + } + } + ++ *hba_table_list = hba_table_list_temp; ++ + return num_hbas; + } + + /* + * This routine expects a valid interface name. + */ +-static int get_index_for_ifname(struct hba_name_table *hba_table, +- int num_hbas, const char *ifname) ++static int get_index_for_ifname(struct hba_name_table_list *hba_table_list, ++ const char *ifname) + { ++ HBA_PORTATTRIBUTES *port_attrs; + int i; + +- for (i = 0 ; i < num_hbas ; i++) { ++ for (i = 0 ; i < hba_table_list->hba_count ; i++) { ++ ++ port_attrs = &hba_table_list->hba_table[i].port_attrs; ++ + if (!check_symbolic_name_for_interface( +- hba_table[i].port_attrs.PortSymbolicName, ++ port_attrs->PortSymbolicName, + ifname)) + return i; + } +@@ -1157,28 +1177,35 @@ enum fcoe_status display_port_stats(const char *ifname, int interval) + HBA_PORTSTATISTICS port_stats; + HBA_FC4STATISTICS port_fc4stats; + HBA_INT64 start_time = 0; +- struct hba_name_table hba_table[MAX_HBA_COUNT]; ++ struct hba_name_table_list *hba_table_list = NULL; + enum fcoe_status rc = SUCCESS; + int i, num_hbas; + + if (fcoeadm_loadhba()) + return EHBAAPIERR; + +- num_hbas = hba_table_init(hba_table); ++ num_hbas = hba_table_list_init(&hba_table_list); ++ if (!num_hbas) ++ goto out; ++ ++ if (num_hbas < 0) { ++ rc = EINTERR; ++ goto out; ++ } + +- i = get_index_for_ifname(hba_table, num_hbas, ifname); ++ i = get_index_for_ifname(hba_table_list, ifname); + + /* + * Return error code if a valid index wasn't returned. + */ + if (i < 0) { +- hba_table_destroy(hba_table); ++ hba_table_list_destroy(hba_table_list); + HBA_FreeLibrary(); + return EHBAAPIERR; + } + +- hba_handle = hba_table[i].hba_handle; +- port_attrs = &hba_table[i].port_attrs; ++ hba_handle = hba_table_list->hba_table[i].hba_handle; ++ port_attrs = &hba_table_list->hba_table[i].port_attrs; + + i = 0; + while (1) { +@@ -1231,21 +1258,34 @@ enum fcoe_status display_port_stats(const char *ifname, int interval) + } while (secs_left); + } + +- hba_table_destroy(hba_table); ++ hba_table_list_destroy(hba_table_list); ++out: + HBA_FreeLibrary(); + return rc; + } + + enum fcoe_status display_adapter_info(const char *ifname) + { +- struct hba_name_table hba_table[MAX_HBA_COUNT]; ++ struct hba_name_table_list *hba_table_list = NULL; + enum fcoe_status rc = SUCCESS; + int i, j, num_hbas = 0; ++ HBA_HANDLE hba_handle; ++ HBA_PORTATTRIBUTES *port_attrs; ++ HBA_PORTATTRIBUTES *sport_attrs; ++ HBA_ADAPTERATTRIBUTES *hba_attrs; ++ HBA_ADAPTERATTRIBUTES *shba_attrs; + + if (fcoeadm_loadhba()) + return EHBAAPIERR; + +- num_hbas = hba_table_init(hba_table); ++ num_hbas = hba_table_list_init(&hba_table_list); ++ if (!num_hbas) ++ goto out; ++ ++ if (num_hbas < 0) { ++ rc = EINTERR; ++ goto out; ++ } + + /* + * Loop through each HBA entry and for each serial number +@@ -1253,52 +1293,59 @@ enum fcoe_status display_adapter_info(const char *ifname) + * on that adapter. + */ + for (i = 0 ; i < num_hbas ; i++) { +- if (hba_table[i].failed || +- hba_table[i].displayed) ++ if (hba_table_list->hba_table[i].failed || ++ hba_table_list->hba_table[i].displayed) + continue; + ++ hba_handle = hba_table_list->hba_table[i].hba_handle; ++ port_attrs = &hba_table_list->hba_table[i].port_attrs; ++ hba_attrs = &hba_table_list->hba_table[i].hba_attrs; ++ + if (ifname && check_symbolic_name_for_interface( +- hba_table[i].port_attrs.PortSymbolicName, ++ port_attrs->PortSymbolicName, + ifname)) { + /* + * Overloading 'displayed' to indicate + * that the HBA/Port should be skipped. + */ +- hba_table[i].displayed = 1; ++ hba_table_list->hba_table[i].displayed = 1; + continue; + } + + /* + * Display the adapter header. + */ +- show_hba_info(&hba_table[i].hba_attrs); ++ show_hba_info(hba_attrs); + + /* + * Loop through HBAs again to print sub-ports. + */ + for (j = 0; j < num_hbas ; j++) { ++ sport_attrs = &hba_table_list->hba_table[j].port_attrs; ++ shba_attrs = &hba_table_list->hba_table[j].hba_attrs; + if (ifname && check_symbolic_name_for_interface( +- hba_table[j].port_attrs.PortSymbolicName, ++ sport_attrs->PortSymbolicName, + ifname)) { + /* + * Overloading 'displayed' to indicate + * that the HBA/Port should be skipped. + */ +- hba_table[i].displayed = 1; ++ hba_table_list->hba_table[i].displayed = 1; + continue; + } + +- if (!strncmp(hba_table[i].hba_attrs.SerialNumber, +- hba_table[j].hba_attrs.SerialNumber, +- strlen(hba_table[i].hba_attrs.SerialNumber))) { +- show_port_info(&hba_table[j].hba_attrs, +- &hba_table[j].port_attrs); +- hba_table[j].displayed = 1; ++ if (!strncmp(hba_attrs->SerialNumber, ++ shba_attrs->SerialNumber, ++ strlen(hba_attrs->SerialNumber))) { ++ show_port_info(shba_attrs, ++ sport_attrs); ++ hba_table_list->hba_table[j].displayed = 1; + } + } + } + +- hba_table_destroy(hba_table); ++ hba_table_list_destroy(hba_table_list); ++out: + HBA_FreeLibrary(); + + return rc; +@@ -1309,14 +1356,24 @@ enum fcoe_status display_target_info(const char *ifname, + { + HBA_STATUS retval; + HBA_PORTATTRIBUTES rport_attrs; +- struct hba_name_table hba_table[MAX_HBA_COUNT]; ++ struct hba_name_table_list *hba_table_list = NULL; + int i, target_index, num_hbas = 0; + enum fcoe_status rc = SUCCESS; ++ HBA_HANDLE hba_handle; ++ HBA_PORTATTRIBUTES *port_attrs; ++ HBA_ADAPTERATTRIBUTES *hba_attrs; + + if (fcoeadm_loadhba()) + return EHBAAPIERR; + +- num_hbas = hba_table_init(hba_table); ++ num_hbas = hba_table_list_init(&hba_table_list); ++ if (!num_hbas) ++ goto out; ++ ++ if (num_hbas < 0) { ++ rc = EINTERR; ++ goto out; ++ } + + /* + * Loop through each HBA entry and for each serial number +@@ -1324,28 +1381,32 @@ enum fcoe_status display_target_info(const char *ifname, + * on that adapter. + */ + for (i = 0 ; i < num_hbas ; i++) { +- if (hba_table[i].failed || +- hba_table[i].displayed) ++ if (hba_table_list->hba_table[i].failed || ++ hba_table_list->hba_table[i].displayed) + continue; + ++ hba_handle = hba_table_list->hba_table[i].hba_handle; ++ port_attrs = &hba_table_list->hba_table[i].port_attrs; ++ hba_attrs = &hba_table_list->hba_table[i].hba_attrs; ++ + if (ifname && check_symbolic_name_for_interface( +- hba_table[i].port_attrs.PortSymbolicName, ++ port_attrs->PortSymbolicName, + ifname)) { + /* + * Overloading 'displayed' to indicate + * that the HBA/Port should be skipped. + */ +- hba_table[i].displayed = 1; ++ hba_table_list->hba_table[i].displayed = 1; + continue; + } + + for (target_index = 0; +- target_index < hba_table[i].port_attrs.NumberofDiscoveredPorts; ++ target_index < port_attrs->NumberofDiscoveredPorts; + target_index++) { + + /* TODO: Second arg might be incorrect */ + retval = HBA_GetDiscoveredPortAttributes( +- hba_table[i].hba_handle, ++ hba_handle, + 0, target_index, + &rport_attrs); + +@@ -1354,7 +1415,7 @@ enum fcoe_status display_target_info(const char *ifname, + "HBA_GetDiscoveredPortAttributes " + "failed for target_index=%d, " + "status=%d\n", target_index, retval); +- hba_table[i].failed = 1; ++ hba_table_list->hba_table[i].failed = 1; + continue; + } + +@@ -1365,26 +1426,26 @@ enum fcoe_status display_target_info(const char *ifname, + continue; + + show_target_info( +- hba_table[i].port_attrs.PortSymbolicName, +- &hba_table[i].hba_attrs, ++ port_attrs->PortSymbolicName, ++ hba_attrs, + &rport_attrs); + +- if (hba_table[i].port_attrs.PortState != +- HBA_PORTSTATE_ONLINE) ++ if (port_attrs->PortState != HBA_PORTSTATE_ONLINE) + continue; + + /* + * This will print the LUN table + * under the target. + */ +- scan_device_map(hba_table[i].hba_handle, +- &hba_table[i].hba_attrs, +- &hba_table[i].port_attrs, ++ scan_device_map(hba_handle, ++ hba_attrs, ++ port_attrs, + &rport_attrs, ifname, style); + } + } + +- hba_table_destroy(hba_table); ++ hba_table_list_destroy(hba_table_list); ++out: + HBA_FreeLibrary(); + + return rc; +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Include-current-lldpad-headers.patch b/fcoe-utils-1.0.18-fcoe-utils-Include-current-lldpad-headers.patch new file mode 100644 index 0000000..d4fb5f2 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Include-current-lldpad-headers.patch @@ -0,0 +1,29 @@ +From 6394a804ef09b83b78348c189dc4b99b440e0f6b Mon Sep 17 00:00:00 2001 +From: Petr Sabata +Date: Thu, 24 Mar 2011 00:39:30 +0000 +Subject: [PATCH 06/16] fcoe-utils: Include current lldpad headers + +Include current header files provided by open-lldp. + +Signed-off-by: Petr Sabata +Signed-off-by: Robert Love +--- + fcoemon.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/fcoemon.c b/fcoemon.c +index 9df473a..74795e4 100644 +--- a/fcoemon.c ++++ b/fcoemon.c +@@ -46,7 +46,7 @@ + + #include + #include +-#include ++#include + + #include "fcoe_utils_version.h" + #include "fcoemon_utils.h" +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Include-fcoe_utils.h-before-scsi-scsi.h.patch b/fcoe-utils-1.0.18-fcoe-utils-Include-fcoe_utils.h-before-scsi-scsi.h.patch new file mode 100644 index 0000000..1ba706d --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Include-fcoe_utils.h-before-scsi-scsi.h.patch @@ -0,0 +1,39 @@ +From 5aaaef140bf87138bca14a088a83a70b19fe4f23 Mon Sep 17 00:00:00 2001 +From: Petr Sabata +Date: Tue, 12 Apr 2011 15:38:04 +0000 +Subject: [PATCH 10/16] fcoe-utils: Include fcoe_utils.h before scsi/scsi.h + +The scsi/scsi.h header file defines 'SUCCESS' as 0x2002 which couses the +'SUCCESS' identifier in fcoe_status to get expanded, resulting in fcping +build failure. This patch prevents it by including fcoe_utils.h first. + +Signed-off-by: Petr Sabata +Signed-off-by: Robert Love +--- + fcping.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +diff --git a/fcping.c b/fcping.c +index 76ce7e2..a68883d 100644 +--- a/fcping.c ++++ b/fcping.c +@@ -47,6 +47,7 @@ + #include + #include "net_types.h" + #include "fc_types.h" ++#include "fcoe_utils.h" + typedef uint8_t u8; + #include + #include +@@ -54,8 +55,6 @@ typedef uint8_t u8; + #include + #include + +-#include "fcoe_utils.h" +- + static const char *cmdname; + + #define FC_MAX_PAYLOAD (2112UL - sizeof(net32_t)) +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Remove-unused-variable-symbolic_name_len.patch b/fcoe-utils-1.0.18-fcoe-utils-Remove-unused-variable-symbolic_name_len.patch new file mode 100644 index 0000000..ef0b6a0 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Remove-unused-variable-symbolic_name_len.patch @@ -0,0 +1,27 @@ +From b8d63420e5c33391ff4ba300df862f599cd2a76b Mon Sep 17 00:00:00 2001 +From: Nithin Sujir +Date: Tue, 12 Apr 2011 05:33:06 +0000 +Subject: [PATCH 11/16] fcoe-utils: Remove unused variable symbolic_name_len + +Signed-off-by: Nithin Nayak Sujir +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + lib/fcoe_utils.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/lib/fcoe_utils.c b/lib/fcoe_utils.c +index 0ebdf9b..142b045 100644 +--- a/lib/fcoe_utils.c ++++ b/lib/fcoe_utils.c +@@ -161,7 +161,6 @@ int fcoe_checkdir(char *dir) + */ + char *get_ifname_from_symbolic_name(const char *symbolic_name) + { +- int symbolic_name_len = strlen(symbolic_name); + char *last_space = strrchr(symbolic_name, ' '); + + if (!last_space || strlen(last_space) == 1) +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoe-utils-Use-iproute2-instead-of-deprecated-vconfi.patch b/fcoe-utils-1.0.18-fcoe-utils-Use-iproute2-instead-of-deprecated-vconfi.patch new file mode 100644 index 0000000..033845c --- /dev/null +++ b/fcoe-utils-1.0.18-fcoe-utils-Use-iproute2-instead-of-deprecated-vconfi.patch @@ -0,0 +1,33 @@ +From 5300772f83c8f3eeb1dbb972d36b4112ec01a51f Mon Sep 17 00:00:00 2001 +From: Petr Sabata +Date: Fri, 1 Apr 2011 00:00:28 +0000 +Subject: [PATCH 12/16] fcoe-utils: Use iproute2 instead of deprecated vconfig + +vconfig has been considered generally deprecated in favor of iproute2 for +some time now. This patch utilizes `ip link' and removes vconfig dependency. + +Signed-off-by: Petr Sabata +Signed-off-by: Robert Love +--- + contrib/fcoe-setup.sh | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/contrib/fcoe-setup.sh b/contrib/fcoe-setup.sh +index ab23400..2142c42 100755 +--- a/contrib/fcoe-setup.sh ++++ b/contrib/fcoe-setup.sh +@@ -24,9 +24,8 @@ create_vlan () { + vif=$(scan_vlan $ifname $vlan) + + if [ -z "$vif" ] ; then +- vconfig set_name_type DEV_PLUS_VID_NO_PAD +- vconfig add $ifname $vlan > /dev/null +- vif="$ifname.$vlan" ++ vif="$ifname.$vlan" ++ ip link add dev $vif link $ifname type vlan id $vlan + fi + ip link set $vif up + echo "$vif" +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoemon-Correct-wrong-error-check.patch b/fcoe-utils-1.0.18-fcoemon-Correct-wrong-error-check.patch new file mode 100644 index 0000000..d8e69b4 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoemon-Correct-wrong-error-check.patch @@ -0,0 +1,32 @@ +From 1511aba0a6586ccd285c0c326f6f9c1a266c6a10 Mon Sep 17 00:00:00 2001 +From: Mark Rustad +Date: Fri, 8 Apr 2011 00:30:04 +0000 +Subject: [PATCH 14/16] fcoemon: Correct wrong error check. + +Correct wrong error check on return value from a socket() call. 0 is a +valid return, and treating it as an error could result in trouble. + +Signed-off-by: Mark Rustad +Tested-by: Ross Brattain +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + fcoemon.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/fcoemon.c b/fcoemon.c +index 77b3fd5..5449ae6 100644 +--- a/fcoemon.c ++++ b/fcoemon.c +@@ -607,7 +607,7 @@ static void fcm_vlan_dev_real_dev(char *vlan_ifname, char *real_ifname) + + fd = socket(PF_INET, SOCK_DGRAM, 0); + +- if (fd <= 0) { ++ if (fd < 0) { + FCM_LOG_ERR(errno, "open vlan query socket error"); + return; + } +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoemon-Fix-2-file-descriptor-leaks.patch b/fcoe-utils-1.0.18-fcoemon-Fix-2-file-descriptor-leaks.patch new file mode 100644 index 0000000..0d2d33b --- /dev/null +++ b/fcoe-utils-1.0.18-fcoemon-Fix-2-file-descriptor-leaks.patch @@ -0,0 +1,42 @@ +From adbae9962146896a90546ef2cd61abc938c7c2f7 Mon Sep 17 00:00:00 2001 +From: Mark Rustad +Date: Fri, 8 Apr 2011 00:24:04 +0000 +Subject: [PATCH 15/16] fcoemon: Fix 2 file descriptor leaks + +Fix 2 file descriptor leaks, one of which can occur repeatedly. + +Signed-off-by: Mark Rustad +Tested-by: Ross Brattain +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + fcoemon.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/fcoemon.c b/fcoemon.c +index 5449ae6..f2f3b86 100644 +--- a/fcoemon.c ++++ b/fcoemon.c +@@ -472,6 +472,7 @@ static int fcm_link_init(void) + rc = bind(fd, (struct sockaddr *)&l_local, sizeof(l_local)); + if (rc == -1) { + FCM_LOG_ERR(errno, "bind error"); ++ close(fd); + return rc; + } + fcm_link_socket = fd; +@@ -1255,8 +1256,10 @@ static void fcm_dcbd_retry_timeout(void *arg) + static void fcm_dcbd_disconnect(void) + { + if (fcm_clif != NULL && fcm_clif->cl_local.sun_path[0] != '\0') { +- if (fcm_clif->cl_fd >= 0) ++ if (fcm_clif->cl_fd >= 0) { + sa_select_rem_fd(fcm_clif->cl_fd); ++ close(fcm_clif->cl_fd); ++ } + unlink(fcm_clif->cl_local.sun_path); + fcm_clif->cl_local.sun_path[0] = '\0'; + fcm_clif->cl_fd = -1; /* mark as disconnected */ +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoemon-Unexpected-FLOGI-after-fcoe-port-is-destroye.patch b/fcoe-utils-1.0.18-fcoemon-Unexpected-FLOGI-after-fcoe-port-is-destroye.patch new file mode 100644 index 0000000..f3f6918 --- /dev/null +++ b/fcoe-utils-1.0.18-fcoemon-Unexpected-FLOGI-after-fcoe-port-is-destroye.patch @@ -0,0 +1,39 @@ +From 16b009e33b6fecab11a856428ada98288724fcbb Mon Sep 17 00:00:00 2001 +From: Nithin Sujir +Date: Wed, 30 Mar 2011 08:56:59 +0000 +Subject: [PATCH 08/16] fcoemon: Unexpected FLOGI after fcoe port is destroyed + +When fcoeadm -d is performed, fcoemon sets fcoe_enable=0 on the +physical port being destroyed but not on the vlan port. If a link toggle +occurs at this time, two link events are received, one each for physical +and vlan interfaces. The physical interface event is ignored due to +fcoe_enable=0 but the vlan event is processed and CREATE is called +resulting in unexpected FLOGI. This also puts the physical and vlan +ports out of sync and a subsequent fcoeadm -d is not processed. + +Signed-off-by: Nithin Nayak Sujir +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + fcoemon.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/fcoemon.c b/fcoemon.c +index 74795e4..77b3fd5 100644 +--- a/fcoemon.c ++++ b/fcoemon.c +@@ -2049,8 +2049,10 @@ static void fcm_fcoe_action(struct fcm_netif *ff, struct fcoe_port *p) + /* destroy all the VLANs */ + vp = fcm_find_fcoe_port(p->ifname, FCP_REAL_IFNAME); + while (vp) { +- if (vp->auto_created) ++ if (vp->auto_created) { ++ vp->fcoe_enable = 0; + fcp_set_next_action(vp, FCP_DESTROY_IF); ++ } + vp = fcm_find_next_fcoe_port(vp, p->ifname); + } + rc = SUCCESS; +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoemon-Use-new-libfcoe.ko-interfaces-create-destroy.patch b/fcoe-utils-1.0.18-fcoemon-Use-new-libfcoe.ko-interfaces-create-destroy.patch new file mode 100644 index 0000000..d86c49d --- /dev/null +++ b/fcoe-utils-1.0.18-fcoemon-Use-new-libfcoe.ko-interfaces-create-destroy.patch @@ -0,0 +1,33 @@ +From dbe527951f6f0836ba8d31ad77d09e8870dfb987 Mon Sep 17 00:00:00 2001 +From: Robert Love +Date: Tue, 25 Jan 2011 04:43:48 +0000 +Subject: [PATCH 01/16] fcoemon: Use new libfcoe.ko interfaces (create, + destroy, ...) + +The create, destroy, enable and disable interfaces have +all moved from fcoe.ko to libfcoe.ko with the kernel +fcoe transport changes. fcoemon needs to use the new kernel +interfaces since the old ones do not exist anymore. + +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + include/fcoe_utils.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/include/fcoe_utils.h b/include/fcoe_utils.h +index 48019b5..46085be 100644 +--- a/include/fcoe_utils.h ++++ b/include/fcoe_utils.h +@@ -38,7 +38,7 @@ + #define SYSFS_MOUNT "/sys" + #define SYSFS_NET SYSFS_MOUNT "/class/net" + #define SYSFS_FCHOST SYSFS_MOUNT "/class/fc_host" +-#define SYSFS_FCOE SYSFS_MOUNT "/module/fcoe/parameters" ++#define SYSFS_FCOE SYSFS_MOUNT "/module/libfcoe/parameters" + + #define FCHOSTBUFLEN 64 + +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoeutils-Cancel-vlan-discovery-timer-only-when-vali.patch b/fcoe-utils-1.0.18-fcoeutils-Cancel-vlan-discovery-timer-only-when-vali.patch new file mode 100644 index 0000000..247a22a --- /dev/null +++ b/fcoe-utils-1.0.18-fcoeutils-Cancel-vlan-discovery-timer-only-when-vali.patch @@ -0,0 +1,78 @@ +From c76c44392b52e58cab9212eb94c19f59835240c7 Mon Sep 17 00:00:00 2001 +From: Nithin Sujir +Date: Wed, 23 Mar 2011 01:38:25 +0000 +Subject: [PATCH 04/16] fcoeutils: Cancel vlan discovery timer only when valid + response is received + +Currently fcoemon cancels the timer as soon as a response is received +whether all the critical descriptors are present or not. This patch +verifies the critical descriptors are present in the vlan response +before cancelling the timer. + +Signed-off-by: Nithin Nayak Sujir +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + fcoemon.c | 20 ++++++++++++++++---- + 1 files changed, 16 insertions(+), 4 deletions(-) + +diff --git a/fcoemon.c b/fcoemon.c +index cd0916b..042d1c8 100644 +--- a/fcoemon.c ++++ b/fcoemon.c +@@ -517,6 +517,12 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg) + struct fip_tlv_hdr *tlv = (struct fip_tlv_hdr *)(fh + 1); + struct fcoe_port *p = arg; + struct fcoe_port *vp; ++ int desc_mask = 0; ++ ++ enum { ++ VALID_MAC = 1, ++ VALID_VLAN = 2, ++ }; + + if (ntohs(fh->fip_proto) != FIP_PROTO_VLAN) + return -1; +@@ -524,14 +530,12 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg) + if (fh->fip_subcode != FIP_VLAN_NOTE) + return -1; + +- /* cancel the retry timer, response received */ +- sa_timer_cancel(&p->vlan_disc_timer); +- + while (len > 0) { + switch (tlv->tlv_type) { + case FIP_TLV_MAC_ADDR: + memcpy(mac, ((struct fip_tlv_mac_addr *)tlv)->mac_addr, + ETHER_ADDR_LEN); ++ desc_mask |= VALID_MAC; + break; + /* + * this expects to see the MAC_ADDR TLV first, +@@ -545,6 +549,7 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg) + vid = ntohs(((struct fip_tlv_vlan *)tlv)->vlan); + vp = fcm_new_vlan(sa->sll_ifindex, vid); + vp->dcb_required = p->dcb_required; ++ desc_mask |= VALID_VLAN; + break; + default: + /* unexpected or unrecognized descriptor */ +@@ -554,7 +559,14 @@ int fcm_vlan_disc_handler(struct fiphdr *fh, struct sockaddr_ll *sa, void *arg) + len -= tlv->tlv_len; + tlv = ((void *) tlv) + (tlv->tlv_len << 2); + }; +- return 0; ++ ++ if (desc_mask == (VALID_MAC | VALID_VLAN)) { ++ /* cancel the retry timer, valid response received */ ++ sa_timer_cancel(&p->vlan_disc_timer); ++ return 0; ++ } else { ++ return -1; ++ } + } + + static void fcm_fip_recv(void *arg) +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-fcoeutils-Retry-vlan-discovery-forever-if-AUTO_VLAN-.patch b/fcoe-utils-1.0.18-fcoeutils-Retry-vlan-discovery-forever-if-AUTO_VLAN-.patch new file mode 100644 index 0000000..06baddd --- /dev/null +++ b/fcoe-utils-1.0.18-fcoeutils-Retry-vlan-discovery-forever-if-AUTO_VLAN-.patch @@ -0,0 +1,40 @@ +From b4e06e408639fa29e3fac5a2235b46a4e1b4a3a0 Mon Sep 17 00:00:00 2001 +From: Nithin Sujir +Date: Wed, 23 Mar 2011 09:36:08 +0000 +Subject: [PATCH 05/16] fcoeutils: Retry vlan discovery forever if AUTO_VLAN + and FCOE_ENABLE are set + +This is a modified patch as per Robert Love's comments - +https://lists.open-fcoe.org/pipermail/devel/2011-March/011272.html + +After trying vlan discovery 10 times fcoemon disables auto_vlan on the +port and falls back to the physical interface. bnx2fc does not support +this. This patch checks for FCOE_ENABLE and AUTO_VLAN and if both are +set for the interface, the vlan discovery will continue until a vlan is +discovered. + +Signed-off-by: Nithin Nayak Sujir +Signed-off-by: Robert Love +Signed-off-by: Petr Sabata +--- + fcoemon.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/fcoemon.c b/fcoemon.c +index 042d1c8..9df473a 100644 +--- a/fcoemon.c ++++ b/fcoemon.c +@@ -1994,7 +1994,9 @@ void fcm_vlan_disc_timeout(void *arg) + struct fcoe_port *p = arg; + FCM_LOG_DBG("%s: VLAN discovery TIMEOUT [%d]", + p->ifname, p->vlan_disc_count); +- if (++(p->vlan_disc_count) > FCM_VLAN_DISC_MAX) { ++ p->vlan_disc_count++; ++ if (!(p->fcoe_enable && p->auto_vlan) && ++ (p->vlan_disc_count > FCM_VLAN_DISC_MAX)) { + FCM_LOG("%s: VLAN discovery failed after %d attempts", + p->ifname, FCM_VLAN_DISC_MAX); + FCM_LOG("%s: disabling VLAN discovery, trying FCoE on %s", +-- +1.7.4.4 + diff --git a/fcoe-utils-1.0.18-help.patch b/fcoe-utils-1.0.18-help.patch new file mode 100644 index 0000000..c9ea696 --- /dev/null +++ b/fcoe-utils-1.0.18-help.patch @@ -0,0 +1,13 @@ +diff --git a/fcnsq.c b/fcnsq.c +index 8722b21..466a85e 100644 +--- a/fcnsq.c ++++ b/fcnsq.c +@@ -360,7 +360,7 @@ static void help(int status) + " --gspn \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.18-kernel-headers.patch b/fcoe-utils-1.0.18-kernel-headers.patch new file mode 100644 index 0000000..eafc0a2 --- /dev/null +++ b/fcoe-utils-1.0.18-kernel-headers.patch @@ -0,0 +1,1494 @@ +diff -Naurd fcoe-utils-1.0.14.orig/fcnsq.c fcoe-utils-1.0.14/fcnsq.c +--- fcoe-utils-1.0.14.orig/fcnsq.c 2010-05-18 23:50:48.000000000 +0200 ++++ fcoe-utils-1.0.14/fcnsq.c 2011-02-23 15:05:18.289429317 +0100 +@@ -39,9 +39,9 @@ + typedef __u64 u64; + #include + #include +-#include +-#include +-#include ++#include "fc_gs.h" ++#include "fc_ns.h" ++#include "scsi_bsg_fc.h" + + static bool quiet = false; + +diff -Naurd fcoe-utils-1.0.14.orig/fcping.c fcoe-utils-1.0.14/fcping.c +--- fcoe-utils-1.0.14.orig/fcping.c 2010-05-18 23:50:48.000000000 +0200 ++++ fcoe-utils-1.0.14/fcping.c 2011-02-23 15:05:18.289429317 +0100 +@@ -49,10 +49,10 @@ + #include "fc_types.h" + typedef uint8_t u8; + #include +-#include +-#include +-#include +-#include ++#include "fc_ns.h" ++#include "fc_gs.h" ++#include "fc_els.h" ++#include "scsi_bsg_fc.h" + + #include "fcoe_utils.h" + +diff -Naurd fcoe-utils-1.0.14.orig/fcrls.c fcoe-utils-1.0.14/fcrls.c +--- fcoe-utils-1.0.14.orig/fcrls.c 2010-05-18 23:50:48.000000000 +0200 ++++ fcoe-utils-1.0.14/fcrls.c 2011-02-23 15:05:34.781471067 +0100 +@@ -40,8 +40,8 @@ + typedef __u64 u64; + #include + #include +-#include +-#include ++#include "fc_els.h" ++#include "scsi_bsg_fc.h" + + #define ntoh24(n) (u32) ((n)[0] << 16 | (n)[1] << 8 | (n)[2]) + #define hton24(h) { (h) >> 16 & 0xff, (h) >> 8 & 0xff, (h) & 0xff } +diff -Naurd fcoe-utils-1.0.14.orig/include/fc_els.h fcoe-utils-1.0.14/include/fc_els.h +--- fcoe-utils-1.0.14.orig/include/fc_els.h 1970-01-01 01:00:00.000000000 +0100 ++++ fcoe-utils-1.0.14/include/fc_els.h 2011-02-23 15:05:18.302052163 +0100 +@@ -0,0 +1,820 @@ ++/* ++ * Copyright(c) 2007 Intel Corporation. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms and conditions of the GNU General Public License, ++ * version 2, as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Maintained at www.Open-FCoE.org ++ */ ++ ++#ifndef _FC_ELS_H_ ++#define _FC_ELS_H_ ++ ++#include ++ ++/* ++ * Fibre Channel Switch - Enhanced Link Services definitions. ++ * From T11 FC-LS Rev 1.2 June 7, 2005. ++ */ ++ ++/* ++ * ELS Command codes - byte 0 of the frame payload ++ */ ++enum fc_els_cmd { ++ ELS_LS_RJT = 0x01, /* ESL reject */ ++ ELS_LS_ACC = 0x02, /* ESL Accept */ ++ ELS_PLOGI = 0x03, /* N_Port login */ ++ ELS_FLOGI = 0x04, /* F_Port login */ ++ ELS_LOGO = 0x05, /* Logout */ ++ ELS_ABTX = 0x06, /* Abort exchange - obsolete */ ++ ELS_RCS = 0x07, /* read connection status */ ++ ELS_RES = 0x08, /* read exchange status block */ ++ ELS_RSS = 0x09, /* read sequence status block */ ++ ELS_RSI = 0x0a, /* read sequence initiative */ ++ ELS_ESTS = 0x0b, /* establish streaming */ ++ ELS_ESTC = 0x0c, /* estimate credit */ ++ ELS_ADVC = 0x0d, /* advise credit */ ++ ELS_RTV = 0x0e, /* read timeout value */ ++ ELS_RLS = 0x0f, /* read link error status block */ ++ ELS_ECHO = 0x10, /* echo */ ++ ELS_TEST = 0x11, /* test */ ++ ELS_RRQ = 0x12, /* reinstate recovery qualifier */ ++ ELS_REC = 0x13, /* read exchange concise */ ++ ELS_SRR = 0x14, /* sequence retransmission request */ ++ ELS_PRLI = 0x20, /* process login */ ++ ELS_PRLO = 0x21, /* process logout */ ++ ELS_SCN = 0x22, /* state change notification */ ++ ELS_TPLS = 0x23, /* test process login state */ ++ ELS_TPRLO = 0x24, /* third party process logout */ ++ ELS_LCLM = 0x25, /* login control list mgmt (obs) */ ++ ELS_GAID = 0x30, /* get alias_ID */ ++ ELS_FACT = 0x31, /* fabric activate alias_id */ ++ ELS_FDACDT = 0x32, /* fabric deactivate alias_id */ ++ ELS_NACT = 0x33, /* N-port activate alias_id */ ++ ELS_NDACT = 0x34, /* N-port deactivate alias_id */ ++ ELS_QOSR = 0x40, /* quality of service request */ ++ ELS_RVCS = 0x41, /* read virtual circuit status */ ++ ELS_PDISC = 0x50, /* discover N_port service params */ ++ ELS_FDISC = 0x51, /* discover F_port service params */ ++ ELS_ADISC = 0x52, /* discover address */ ++ ELS_RNC = 0x53, /* report node cap (obs) */ ++ ELS_FARP_REQ = 0x54, /* FC ARP request */ ++ ELS_FARP_REPL = 0x55, /* FC ARP reply */ ++ ELS_RPS = 0x56, /* read port status block */ ++ ELS_RPL = 0x57, /* read port list */ ++ ELS_RPBC = 0x58, /* read port buffer condition */ ++ ELS_FAN = 0x60, /* fabric address notification */ ++ ELS_RSCN = 0x61, /* registered state change notification */ ++ ELS_SCR = 0x62, /* state change registration */ ++ ELS_RNFT = 0x63, /* report node FC-4 types */ ++ ELS_CSR = 0x68, /* clock synch. request */ ++ ELS_CSU = 0x69, /* clock synch. update */ ++ ELS_LINIT = 0x70, /* loop initialize */ ++ ELS_LSTS = 0x72, /* loop status */ ++ ELS_RNID = 0x78, /* request node ID data */ ++ ELS_RLIR = 0x79, /* registered link incident report */ ++ ELS_LIRR = 0x7a, /* link incident record registration */ ++ ELS_SRL = 0x7b, /* scan remote loop */ ++ ELS_SBRP = 0x7c, /* set bit-error reporting params */ ++ ELS_RPSC = 0x7d, /* report speed capabilities */ ++ ELS_QSA = 0x7e, /* query security attributes */ ++ ELS_EVFP = 0x7f, /* exchange virt. fabrics params */ ++ ELS_LKA = 0x80, /* link keep-alive */ ++ ELS_AUTH_ELS = 0x90, /* authentication ELS */ ++}; ++ ++/* ++ * Initializer useful for decoding table. ++ * Please keep this in sync with the above definitions. ++ */ ++#define FC_ELS_CMDS_INIT { \ ++ [ELS_LS_RJT] = "LS_RJT", \ ++ [ELS_LS_ACC] = "LS_ACC", \ ++ [ELS_PLOGI] = "PLOGI", \ ++ [ELS_FLOGI] = "FLOGI", \ ++ [ELS_LOGO] = "LOGO", \ ++ [ELS_ABTX] = "ABTX", \ ++ [ELS_RCS] = "RCS", \ ++ [ELS_RES] = "RES", \ ++ [ELS_RSS] = "RSS", \ ++ [ELS_RSI] = "RSI", \ ++ [ELS_ESTS] = "ESTS", \ ++ [ELS_ESTC] = "ESTC", \ ++ [ELS_ADVC] = "ADVC", \ ++ [ELS_RTV] = "RTV", \ ++ [ELS_RLS] = "RLS", \ ++ [ELS_ECHO] = "ECHO", \ ++ [ELS_TEST] = "TEST", \ ++ [ELS_RRQ] = "RRQ", \ ++ [ELS_REC] = "REC", \ ++ [ELS_SRR] = "SRR", \ ++ [ELS_PRLI] = "PRLI", \ ++ [ELS_PRLO] = "PRLO", \ ++ [ELS_SCN] = "SCN", \ ++ [ELS_TPLS] = "TPLS", \ ++ [ELS_TPRLO] = "TPRLO", \ ++ [ELS_LCLM] = "LCLM", \ ++ [ELS_GAID] = "GAID", \ ++ [ELS_FACT] = "FACT", \ ++ [ELS_FDACDT] = "FDACDT", \ ++ [ELS_NACT] = "NACT", \ ++ [ELS_NDACT] = "NDACT", \ ++ [ELS_QOSR] = "QOSR", \ ++ [ELS_RVCS] = "RVCS", \ ++ [ELS_PDISC] = "PDISC", \ ++ [ELS_FDISC] = "FDISC", \ ++ [ELS_ADISC] = "ADISC", \ ++ [ELS_RNC] = "RNC", \ ++ [ELS_FARP_REQ] = "FARP_REQ", \ ++ [ELS_FARP_REPL] = "FARP_REPL", \ ++ [ELS_RPS] = "RPS", \ ++ [ELS_RPL] = "RPL", \ ++ [ELS_RPBC] = "RPBC", \ ++ [ELS_FAN] = "FAN", \ ++ [ELS_RSCN] = "RSCN", \ ++ [ELS_SCR] = "SCR", \ ++ [ELS_RNFT] = "RNFT", \ ++ [ELS_CSR] = "CSR", \ ++ [ELS_CSU] = "CSU", \ ++ [ELS_LINIT] = "LINIT", \ ++ [ELS_LSTS] = "LSTS", \ ++ [ELS_RNID] = "RNID", \ ++ [ELS_RLIR] = "RLIR", \ ++ [ELS_LIRR] = "LIRR", \ ++ [ELS_SRL] = "SRL", \ ++ [ELS_SBRP] = "SBRP", \ ++ [ELS_RPSC] = "RPSC", \ ++ [ELS_QSA] = "QSA", \ ++ [ELS_EVFP] = "EVFP", \ ++ [ELS_LKA] = "LKA", \ ++ [ELS_AUTH_ELS] = "AUTH_ELS", \ ++} ++ ++/* ++ * LS_ACC payload. ++ */ ++struct fc_els_ls_acc { ++ __u8 la_cmd; /* command code ELS_LS_ACC */ ++ __u8 la_resv[3]; /* reserved */ ++}; ++ ++/* ++ * ELS reject payload. ++ */ ++struct fc_els_ls_rjt { ++ __u8 er_cmd; /* command code ELS_LS_RJT */ ++ __u8 er_resv[4]; /* reserved must be zero */ ++ __u8 er_reason; /* reason (enum fc_els_rjt_reason below) */ ++ __u8 er_explan; /* explanation (enum fc_els_rjt_explan below) */ ++ __u8 er_vendor; /* vendor specific code */ ++}; ++ ++/* ++ * ELS reject reason codes (er_reason). ++ */ ++enum fc_els_rjt_reason { ++ ELS_RJT_NONE = 0, /* no reject - not to be sent */ ++ ELS_RJT_INVAL = 0x01, /* invalid ELS command code */ ++ ELS_RJT_LOGIC = 0x03, /* logical error */ ++ ELS_RJT_BUSY = 0x05, /* logical busy */ ++ ELS_RJT_PROT = 0x07, /* protocol error */ ++ ELS_RJT_UNAB = 0x09, /* unable to perform command request */ ++ ELS_RJT_UNSUP = 0x0b, /* command not supported */ ++ ELS_RJT_INPROG = 0x0e, /* command already in progress */ ++ ELS_RJT_VENDOR = 0xff, /* vendor specific error */ ++}; ++ ++ ++/* ++ * reason code explanation (er_explan). ++ */ ++enum fc_els_rjt_explan { ++ ELS_EXPL_NONE = 0x00, /* No additional explanation */ ++ ELS_EXPL_SPP_OPT_ERR = 0x01, /* service parameter error - options */ ++ ELS_EXPL_SPP_ICTL_ERR = 0x03, /* service parm error - initiator ctl */ ++ ELS_EXPL_AH = 0x11, /* invalid association header */ ++ ELS_EXPL_AH_REQ = 0x13, /* association_header required */ ++ ELS_EXPL_SID = 0x15, /* invalid originator S_ID */ ++ ELS_EXPL_OXID_RXID = 0x17, /* invalid OX_ID-RX_ID combination */ ++ ELS_EXPL_INPROG = 0x19, /* Request already in progress */ ++ ELS_EXPL_PLOGI_REQD = 0x1e, /* N_Port login required */ ++ ELS_EXPL_INSUF_RES = 0x29, /* insufficient resources */ ++ ELS_EXPL_UNAB_DATA = 0x2a, /* unable to supply requested data */ ++ ELS_EXPL_UNSUPR = 0x2c, /* Request not supported */ ++ ELS_EXPL_INV_LEN = 0x2d, /* Invalid payload length */ ++ /* TBD - above definitions incomplete */ ++}; ++ ++/* ++ * Common service parameters (N ports). ++ */ ++struct fc_els_csp { ++ __u8 sp_hi_ver; /* highest version supported (obs.) */ ++ __u8 sp_lo_ver; /* highest version supported (obs.) */ ++ __be16 sp_bb_cred; /* buffer-to-buffer credits */ ++ __be16 sp_features; /* common feature flags */ ++ __be16 sp_bb_data; /* b-b state number and data field sz */ ++ union { ++ struct { ++ __be16 _sp_tot_seq; /* total concurrent sequences */ ++ __be16 _sp_rel_off; /* rel. offset by info cat */ ++ } sp_plogi; ++ struct { ++ __be32 _sp_r_a_tov; /* resource alloc. timeout msec */ ++ } sp_flogi_acc; ++ } sp_u; ++ __be32 sp_e_d_tov; /* error detect timeout value */ ++}; ++#define sp_tot_seq sp_u.sp_plogi._sp_tot_seq ++#define sp_rel_off sp_u.sp_plogi._sp_rel_off ++#define sp_r_a_tov sp_u.sp_flogi_acc._sp_r_a_tov ++ ++#define FC_SP_BB_DATA_MASK 0xfff /* mask for data field size in sp_bb_data */ ++ ++/* ++ * Minimum and maximum values for max data field size in service parameters. ++ */ ++#define FC_SP_MIN_MAX_PAYLOAD FC_MIN_MAX_PAYLOAD ++#define FC_SP_MAX_MAX_PAYLOAD FC_MAX_PAYLOAD ++ ++/* ++ * sp_features ++ */ ++#define FC_SP_FT_NPIV 0x8000 /* multiple N_Port_ID support (FLOGI) */ ++#define FC_SP_FT_CIRO 0x8000 /* continuously increasing rel off (PLOGI) */ ++#define FC_SP_FT_CLAD 0x8000 /* clean address (in FLOGI LS_ACC) */ ++#define FC_SP_FT_RAND 0x4000 /* random relative offset */ ++#define FC_SP_FT_VAL 0x2000 /* valid vendor version level */ ++#define FC_SP_FT_NPIV_ACC 0x2000 /* NPIV assignment (FLOGI LS_ACC) */ ++#define FC_SP_FT_FPORT 0x1000 /* F port (1) vs. N port (0) */ ++#define FC_SP_FT_ABB 0x0800 /* alternate BB_credit management */ ++#define FC_SP_FT_EDTR 0x0400 /* E_D_TOV Resolution is nanoseconds */ ++#define FC_SP_FT_MCAST 0x0200 /* multicast */ ++#define FC_SP_FT_BCAST 0x0100 /* broadcast */ ++#define FC_SP_FT_HUNT 0x0080 /* hunt group */ ++#define FC_SP_FT_SIMP 0x0040 /* dedicated simplex */ ++#define FC_SP_FT_SEC 0x0020 /* reserved for security */ ++#define FC_SP_FT_CSYN 0x0010 /* clock synch. supported */ ++#define FC_SP_FT_RTTOV 0x0008 /* R_T_TOV value 100 uS, else 100 mS */ ++#define FC_SP_FT_HALF 0x0004 /* dynamic half duplex */ ++#define FC_SP_FT_SEQC 0x0002 /* SEQ_CNT */ ++#define FC_SP_FT_PAYL 0x0001 /* FLOGI payload length 256, else 116 */ ++ ++/* ++ * Class-specific service parameters. ++ */ ++struct fc_els_cssp { ++ __be16 cp_class; /* class flags */ ++ __be16 cp_init; /* initiator flags */ ++ __be16 cp_recip; /* recipient flags */ ++ __be16 cp_rdfs; /* receive data field size */ ++ __be16 cp_con_seq; /* concurrent sequences */ ++ __be16 cp_ee_cred; /* N-port end-to-end credit */ ++ __u8 cp_resv1; /* reserved */ ++ __u8 cp_open_seq; /* open sequences per exchange */ ++ __u8 _cp_resv2[2]; /* reserved */ ++}; ++ ++/* ++ * cp_class flags. ++ */ ++#define FC_CPC_VALID 0x8000 /* class valid */ ++#define FC_CPC_IMIX 0x4000 /* intermix mode */ ++#define FC_CPC_SEQ 0x0800 /* sequential delivery */ ++#define FC_CPC_CAMP 0x0200 /* camp-on */ ++#define FC_CPC_PRI 0x0080 /* priority */ ++ ++/* ++ * cp_init flags. ++ * (TBD: not all flags defined here). ++ */ ++#define FC_CPI_CSYN 0x0010 /* clock synch. capable */ ++ ++/* ++ * cp_recip flags. ++ */ ++#define FC_CPR_CSYN 0x0008 /* clock synch. capable */ ++ ++/* ++ * NFC_ELS_FLOGI: Fabric login request. ++ * NFC_ELS_PLOGI: Port login request (same format). ++ */ ++struct fc_els_flogi { ++ __u8 fl_cmd; /* command */ ++ __u8 _fl_resvd[3]; /* must be zero */ ++ struct fc_els_csp fl_csp; /* common service parameters */ ++ __be64 fl_wwpn; /* port name */ ++ __be64 fl_wwnn; /* node name */ ++ struct fc_els_cssp fl_cssp[4]; /* class 1-4 service parameters */ ++ __u8 fl_vend[16]; /* vendor version level */ ++} __attribute__((__packed__)); ++ ++/* ++ * Process login service parameter page. ++ */ ++struct fc_els_spp { ++ __u8 spp_type; /* type code or common service params */ ++ __u8 spp_type_ext; /* type code extension */ ++ __u8 spp_flags; ++ __u8 _spp_resvd; ++ __be32 spp_orig_pa; /* originator process associator */ ++ __be32 spp_resp_pa; /* responder process associator */ ++ __be32 spp_params; /* service parameters */ ++}; ++ ++/* ++ * spp_flags. ++ */ ++#define FC_SPP_OPA_VAL 0x80 /* originator proc. assoc. valid */ ++#define FC_SPP_RPA_VAL 0x40 /* responder proc. assoc. valid */ ++#define FC_SPP_EST_IMG_PAIR 0x20 /* establish image pair */ ++#define FC_SPP_RESP_MASK 0x0f /* mask for response code (below) */ ++ ++/* ++ * SPP response code in spp_flags - lower 4 bits. ++ */ ++enum fc_els_spp_resp { ++ FC_SPP_RESP_ACK = 1, /* request executed */ ++ FC_SPP_RESP_RES = 2, /* unable due to lack of resources */ ++ FC_SPP_RESP_INIT = 3, /* initialization not complete */ ++ FC_SPP_RESP_NO_PA = 4, /* unknown process associator */ ++ FC_SPP_RESP_CONF = 5, /* configuration precludes image pair */ ++ FC_SPP_RESP_COND = 6, /* request completed conditionally */ ++ FC_SPP_RESP_MULT = 7, /* unable to handle multiple SPPs */ ++ FC_SPP_RESP_INVL = 8, /* SPP is invalid */ ++}; ++ ++/* ++ * ELS_RRQ - Reinstate Recovery Qualifier ++ */ ++struct fc_els_rrq { ++ __u8 rrq_cmd; /* command (0x12) */ ++ __u8 rrq_zero[3]; /* specified as zero - part of cmd */ ++ __u8 rrq_resvd; /* reserved */ ++ __u8 rrq_s_id[3]; /* originator FID */ ++ __be16 rrq_ox_id; /* originator exchange ID */ ++ __be16 rrq_rx_id; /* responders exchange ID */ ++}; ++ ++/* ++ * ELS_REC - Read exchange concise. ++ */ ++struct fc_els_rec { ++ __u8 rec_cmd; /* command (0x13) */ ++ __u8 rec_zero[3]; /* specified as zero - part of cmd */ ++ __u8 rec_resvd; /* reserved */ ++ __u8 rec_s_id[3]; /* originator FID */ ++ __be16 rec_ox_id; /* originator exchange ID */ ++ __be16 rec_rx_id; /* responders exchange ID */ ++}; ++ ++/* ++ * ELS_REC LS_ACC payload. ++ */ ++struct fc_els_rec_acc { ++ __u8 reca_cmd; /* accept (0x02) */ ++ __u8 reca_zero[3]; /* specified as zero - part of cmd */ ++ __be16 reca_ox_id; /* originator exchange ID */ ++ __be16 reca_rx_id; /* responders exchange ID */ ++ __u8 reca_resvd1; /* reserved */ ++ __u8 reca_ofid[3]; /* originator FID */ ++ __u8 reca_resvd2; /* reserved */ ++ __u8 reca_rfid[3]; /* responder FID */ ++ __be32 reca_fc4value; /* FC4 value */ ++ __be32 reca_e_stat; /* ESB (exchange status block) status */ ++}; ++ ++/* ++ * ELS_PRLI - Process login request and response. ++ */ ++struct fc_els_prli { ++ __u8 prli_cmd; /* command */ ++ __u8 prli_spp_len; /* length of each serv. parm. page */ ++ __be16 prli_len; /* length of entire payload */ ++ /* service parameter pages follow */ ++}; ++ ++/* ++ * ELS_ADISC payload ++ */ ++struct fc_els_adisc { ++ __u8 adisc_cmd; ++ __u8 adisc_resv[3]; ++ __u8 adisc_resv1; ++ __u8 adisc_hard_addr[3]; ++ __be64 adisc_wwpn; ++ __be64 adisc_wwnn; ++ __u8 adisc_resv2; ++ __u8 adisc_port_id[3]; ++} __attribute__((__packed__)); ++ ++/* ++ * ELS_LOGO - process or fabric logout. ++ */ ++struct fc_els_logo { ++ __u8 fl_cmd; /* command code */ ++ __u8 fl_zero[3]; /* specified as zero - part of cmd */ ++ __u8 fl_resvd; /* reserved */ ++ __u8 fl_n_port_id[3];/* N port ID */ ++ __be64 fl_n_port_wwn; /* port name */ ++}; ++ ++/* ++ * ELS_RTV - read timeout value. ++ */ ++struct fc_els_rtv { ++ __u8 rtv_cmd; /* command code 0x0e */ ++ __u8 rtv_zero[3]; /* specified as zero - part of cmd */ ++}; ++ ++/* ++ * LS_ACC for ELS_RTV - read timeout value. ++ */ ++struct fc_els_rtv_acc { ++ __u8 rtv_cmd; /* command code 0x02 */ ++ __u8 rtv_zero[3]; /* specified as zero - part of cmd */ ++ __be32 rtv_r_a_tov; /* resource allocation timeout value */ ++ __be32 rtv_e_d_tov; /* error detection timeout value */ ++ __be32 rtv_toq; /* timeout qualifier (see below) */ ++}; ++ ++/* ++ * rtv_toq bits. ++ */ ++#define FC_ELS_RTV_EDRES (1 << 26) /* E_D_TOV resolution is nS else mS */ ++#define FC_ELS_RTV_RTTOV (1 << 19) /* R_T_TOV is 100 uS else 100 mS */ ++ ++/* ++ * ELS_SCR - state change registration payload. ++ */ ++struct fc_els_scr { ++ __u8 scr_cmd; /* command code */ ++ __u8 scr_resv[6]; /* reserved */ ++ __u8 scr_reg_func; /* registration function (see below) */ ++}; ++ ++enum fc_els_scr_func { ++ ELS_SCRF_FAB = 1, /* fabric-detected registration */ ++ ELS_SCRF_NPORT = 2, /* Nx_Port-detected registration */ ++ ELS_SCRF_FULL = 3, /* full registration */ ++ ELS_SCRF_CLEAR = 255, /* remove any current registrations */ ++}; ++ ++/* ++ * ELS_RSCN - registered state change notification payload. ++ */ ++struct fc_els_rscn { ++ __u8 rscn_cmd; /* RSCN opcode (0x61) */ ++ __u8 rscn_page_len; /* page length (4) */ ++ __be16 rscn_plen; /* payload length including this word */ ++ ++ /* followed by 4-byte generic affected Port_ID pages */ ++}; ++ ++struct fc_els_rscn_page { ++ __u8 rscn_page_flags; /* event and address format */ ++ __u8 rscn_fid[3]; /* fabric ID */ ++}; ++ ++#define ELS_RSCN_EV_QUAL_BIT 2 /* shift count for event qualifier */ ++#define ELS_RSCN_EV_QUAL_MASK 0xf /* mask for event qualifier */ ++#define ELS_RSCN_ADDR_FMT_BIT 0 /* shift count for address format */ ++#define ELS_RSCN_ADDR_FMT_MASK 0x3 /* mask for address format */ ++ ++enum fc_els_rscn_ev_qual { ++ ELS_EV_QUAL_NONE = 0, /* unspecified */ ++ ELS_EV_QUAL_NS_OBJ = 1, /* changed name server object */ ++ ELS_EV_QUAL_PORT_ATTR = 2, /* changed port attribute */ ++ ELS_EV_QUAL_SERV_OBJ = 3, /* changed service object */ ++ ELS_EV_QUAL_SW_CONFIG = 4, /* changed switch configuration */ ++ ELS_EV_QUAL_REM_OBJ = 5, /* removed object */ ++}; ++ ++enum fc_els_rscn_addr_fmt { ++ ELS_ADDR_FMT_PORT = 0, /* rscn_fid is a port address */ ++ ELS_ADDR_FMT_AREA = 1, /* rscn_fid is a area address */ ++ ELS_ADDR_FMT_DOM = 2, /* rscn_fid is a domain address */ ++ ELS_ADDR_FMT_FAB = 3, /* anything on fabric may have changed */ ++}; ++ ++/* ++ * ELS_RNID - request Node ID. ++ */ ++struct fc_els_rnid { ++ __u8 rnid_cmd; /* RNID opcode (0x78) */ ++ __u8 rnid_resv[3]; /* reserved */ ++ __u8 rnid_fmt; /* data format */ ++ __u8 rnid_resv2[3]; /* reserved */ ++}; ++ ++/* ++ * Node Identification Data formats (rnid_fmt) ++ */ ++enum fc_els_rnid_fmt { ++ ELS_RNIDF_NONE = 0, /* no specific identification data */ ++ ELS_RNIDF_GEN = 0xdf, /* general topology discovery format */ ++}; ++ ++/* ++ * ELS_RNID response. ++ */ ++struct fc_els_rnid_resp { ++ __u8 rnid_cmd; /* response code (LS_ACC) */ ++ __u8 rnid_resv[3]; /* reserved */ ++ __u8 rnid_fmt; /* data format */ ++ __u8 rnid_cid_len; /* common ID data length */ ++ __u8 rnid_resv2; /* reserved */ ++ __u8 rnid_sid_len; /* specific ID data length */ ++}; ++ ++struct fc_els_rnid_cid { ++ __be64 rnid_wwpn; /* N port name */ ++ __be64 rnid_wwnn; /* node name */ ++}; ++ ++struct fc_els_rnid_gen { ++ __u8 rnid_vend_id[16]; /* vendor-unique ID */ ++ __be32 rnid_atype; /* associated type (see below) */ ++ __be32 rnid_phys_port; /* physical port number */ ++ __be32 rnid_att_nodes; /* number of attached nodes */ ++ __u8 rnid_node_mgmt; /* node management (see below) */ ++ __u8 rnid_ip_ver; /* IP version (see below) */ ++ __be16 rnid_prot_port; /* UDP / TCP port number */ ++ __be32 rnid_ip_addr[4]; /* IP address */ ++ __u8 rnid_resvd[2]; /* reserved */ ++ __be16 rnid_vend_spec; /* vendor-specific field */ ++}; ++ ++enum fc_els_rnid_atype { ++ ELS_RNIDA_UNK = 0x01, /* unknown */ ++ ELS_RNIDA_OTHER = 0x02, /* none of the following */ ++ ELS_RNIDA_HUB = 0x03, ++ ELS_RNIDA_SWITCH = 0x04, ++ ELS_RNIDA_GATEWAY = 0x05, ++ ELS_RNIDA_CONV = 0x06, /* Obsolete, do not use this value */ ++ ELS_RNIDA_HBA = 0x07, /* Obsolete, do not use this value */ ++ ELS_RNIDA_PROXY = 0x08, /* Obsolete, do not use this value */ ++ ELS_RNIDA_STORAGE = 0x09, ++ ELS_RNIDA_HOST = 0x0a, ++ ELS_RNIDA_SUBSYS = 0x0b, /* storage subsystem (e.g., RAID) */ ++ ELS_RNIDA_ACCESS = 0x0e, /* access device (e.g. media changer) */ ++ ELS_RNIDA_NAS = 0x11, /* NAS server */ ++ ELS_RNIDA_BRIDGE = 0x12, /* bridge */ ++ ELS_RNIDA_VIRT = 0x13, /* virtualization device */ ++ ELS_RNIDA_MF = 0xff, /* multifunction device (bits below) */ ++ ELS_RNIDA_MF_HUB = 1UL << 31, /* hub */ ++ ELS_RNIDA_MF_SW = 1UL << 30, /* switch */ ++ ELS_RNIDA_MF_GW = 1UL << 29, /* gateway */ ++ ELS_RNIDA_MF_ST = 1UL << 28, /* storage */ ++ ELS_RNIDA_MF_HOST = 1UL << 27, /* host */ ++ ELS_RNIDA_MF_SUB = 1UL << 26, /* storage subsystem */ ++ ELS_RNIDA_MF_ACC = 1UL << 25, /* storage access dev */ ++ ELS_RNIDA_MF_WDM = 1UL << 24, /* wavelength division mux */ ++ ELS_RNIDA_MF_NAS = 1UL << 23, /* NAS server */ ++ ELS_RNIDA_MF_BR = 1UL << 22, /* bridge */ ++ ELS_RNIDA_MF_VIRT = 1UL << 21, /* virtualization device */ ++}; ++ ++enum fc_els_rnid_mgmt { ++ ELS_RNIDM_SNMP = 0, ++ ELS_RNIDM_TELNET = 1, ++ ELS_RNIDM_HTTP = 2, ++ ELS_RNIDM_HTTPS = 3, ++ ELS_RNIDM_XML = 4, /* HTTP + XML */ ++}; ++ ++enum fc_els_rnid_ipver { ++ ELS_RNIDIP_NONE = 0, /* no IP support or node mgmt. */ ++ ELS_RNIDIP_V4 = 1, /* IPv4 */ ++ ELS_RNIDIP_V6 = 2, /* IPv6 */ ++}; ++ ++/* ++ * ELS RPL - Read Port List. ++ */ ++struct fc_els_rpl { ++ __u8 rpl_cmd; /* command */ ++ __u8 rpl_resv[5]; /* reserved - must be zero */ ++ __be16 rpl_max_size; /* maximum response size or zero */ ++ __u8 rpl_resv1; /* reserved - must be zero */ ++ __u8 rpl_index[3]; /* starting index */ ++}; ++ ++/* ++ * Port number block in RPL response. ++ */ ++struct fc_els_pnb { ++ __be32 pnb_phys_pn; /* physical port number */ ++ __u8 pnb_resv; /* reserved */ ++ __u8 pnb_port_id[3]; /* port ID */ ++ __be64 pnb_wwpn; /* port name */ ++}; ++ ++/* ++ * RPL LS_ACC response. ++ */ ++struct fc_els_rpl_resp { ++ __u8 rpl_cmd; /* ELS_LS_ACC */ ++ __u8 rpl_resv1; /* reserved - must be zero */ ++ __be16 rpl_plen; /* payload length */ ++ __u8 rpl_resv2; /* reserved - must be zero */ ++ __u8 rpl_llen[3]; /* list length */ ++ __u8 rpl_resv3; /* reserved - must be zero */ ++ __u8 rpl_index[3]; /* starting index */ ++ struct fc_els_pnb rpl_pnb[1]; /* variable number of PNBs */ ++}; ++ ++/* ++ * Link Error Status Block. ++ */ ++struct fc_els_lesb { ++ __be32 lesb_link_fail; /* link failure count */ ++ __be32 lesb_sync_loss; /* loss of synchronization count */ ++ __be32 lesb_sig_loss; /* loss of signal count */ ++ __be32 lesb_prim_err; /* primitive sequence error count */ ++ __be32 lesb_inv_word; /* invalid transmission word count */ ++ __be32 lesb_inv_crc; /* invalid CRC count */ ++}; ++ ++/* ++ * ELS RPS - Read Port Status Block request. ++ */ ++struct fc_els_rps { ++ __u8 rps_cmd; /* command */ ++ __u8 rps_resv[2]; /* reserved - must be zero */ ++ __u8 rps_flag; /* flag - see below */ ++ __be64 rps_port_spec; /* port selection */ ++}; ++ ++enum fc_els_rps_flag { ++ FC_ELS_RPS_DID = 0x00, /* port identified by D_ID of req. */ ++ FC_ELS_RPS_PPN = 0x01, /* port_spec is physical port number */ ++ FC_ELS_RPS_WWPN = 0x02, /* port_spec is port WWN */ ++}; ++ ++/* ++ * ELS RPS LS_ACC response. ++ */ ++struct fc_els_rps_resp { ++ __u8 rps_cmd; /* command - LS_ACC */ ++ __u8 rps_resv[2]; /* reserved - must be zero */ ++ __u8 rps_flag; /* flag - see below */ ++ __u8 rps_resv2[2]; /* reserved */ ++ __be16 rps_status; /* port status - see below */ ++ struct fc_els_lesb rps_lesb; /* link error status block */ ++}; ++ ++enum fc_els_rps_resp_flag { ++ FC_ELS_RPS_LPEV = 0x01, /* L_port extension valid */ ++}; ++ ++enum fc_els_rps_resp_status { ++ FC_ELS_RPS_PTP = 1 << 5, /* point-to-point connection */ ++ FC_ELS_RPS_LOOP = 1 << 4, /* loop mode */ ++ FC_ELS_RPS_FAB = 1 << 3, /* fabric present */ ++ FC_ELS_RPS_NO_SIG = 1 << 2, /* loss of signal */ ++ FC_ELS_RPS_NO_SYNC = 1 << 1, /* loss of synchronization */ ++ FC_ELS_RPS_RESET = 1 << 0, /* in link reset protocol */ ++}; ++ ++/* ++ * ELS LIRR - Link Incident Record Registration request. ++ */ ++struct fc_els_lirr { ++ __u8 lirr_cmd; /* command */ ++ __u8 lirr_resv[3]; /* reserved - must be zero */ ++ __u8 lirr_func; /* registration function */ ++ __u8 lirr_fmt; /* FC-4 type of RLIR requested */ ++ __u8 lirr_resv2[2]; /* reserved - must be zero */ ++}; ++ ++enum fc_els_lirr_func { ++ ELS_LIRR_SET_COND = 0x01, /* set - conditionally receive */ ++ ELS_LIRR_SET_UNCOND = 0x02, /* set - unconditionally receive */ ++ ELS_LIRR_CLEAR = 0xff /* clear registration */ ++}; ++ ++/* ++ * ELS SRL - Scan Remote Loop request. ++ */ ++struct fc_els_srl { ++ __u8 srl_cmd; /* command */ ++ __u8 srl_resv[3]; /* reserved - must be zero */ ++ __u8 srl_flag; /* flag - see below */ ++ __u8 srl_flag_param[3]; /* flag parameter */ ++}; ++ ++enum fc_els_srl_flag { ++ FC_ELS_SRL_ALL = 0x00, /* scan all FL ports */ ++ FC_ELS_SRL_ONE = 0x01, /* scan specified loop */ ++ FC_ELS_SRL_EN_PER = 0x02, /* enable periodic scanning (param) */ ++ FC_ELS_SRL_DIS_PER = 0x03, /* disable periodic scanning */ ++}; ++ ++/* ++ * ELS RLS - Read Link Error Status Block request. ++ */ ++struct fc_els_rls { ++ __u8 rls_cmd; /* command */ ++ __u8 rls_resv[4]; /* reserved - must be zero */ ++ __u8 rls_port_id[3]; /* port ID */ ++}; ++ ++/* ++ * ELS RLS LS_ACC Response. ++ */ ++struct fc_els_rls_resp { ++ __u8 rls_cmd; /* ELS_LS_ACC */ ++ __u8 rls_resv[3]; /* reserved - must be zero */ ++ struct fc_els_lesb rls_lesb; /* link error status block */ ++}; ++ ++/* ++ * ELS RLIR - Registered Link Incident Report. ++ * This is followed by the CLIR and the CLID, described below. ++ */ ++struct fc_els_rlir { ++ __u8 rlir_cmd; /* command */ ++ __u8 rlir_resv[3]; /* reserved - must be zero */ ++ __u8 rlir_fmt; /* format (FC4-type if type specific) */ ++ __u8 rlir_clr_len; /* common link incident record length */ ++ __u8 rlir_cld_len; /* common link incident desc. length */ ++ __u8 rlir_slr_len; /* spec. link incident record length */ ++}; ++ ++/* ++ * CLIR - Common Link Incident Record Data. - Sent via RLIR. ++ */ ++struct fc_els_clir { ++ __be64 clir_wwpn; /* incident port name */ ++ __be64 clir_wwnn; /* incident port node name */ ++ __u8 clir_port_type; /* incident port type */ ++ __u8 clir_port_id[3]; /* incident port ID */ ++ ++ __be64 clir_conn_wwpn; /* connected port name */ ++ __be64 clir_conn_wwnn; /* connected node name */ ++ __be64 clir_fab_name; /* fabric name */ ++ __be32 clir_phys_port; /* physical port number */ ++ __be32 clir_trans_id; /* transaction ID */ ++ __u8 clir_resv[3]; /* reserved */ ++ __u8 clir_ts_fmt; /* time stamp format */ ++ __be64 clir_timestamp; /* time stamp */ ++}; ++ ++/* ++ * CLIR clir_ts_fmt - time stamp format values. ++ */ ++enum fc_els_clir_ts_fmt { ++ ELS_CLIR_TS_UNKNOWN = 0, /* time stamp field unknown */ ++ ELS_CLIR_TS_SEC_FRAC = 1, /* time in seconds and fractions */ ++ ELS_CLIR_TS_CSU = 2, /* time in clock synch update format */ ++}; ++ ++/* ++ * Common Link Incident Descriptor - sent via RLIR. ++ */ ++struct fc_els_clid { ++ __u8 clid_iq; /* incident qualifier flags */ ++ __u8 clid_ic; /* incident code */ ++ __be16 clid_epai; /* domain/area of ISL */ ++}; ++ ++/* ++ * CLID incident qualifier flags. ++ */ ++enum fc_els_clid_iq { ++ ELS_CLID_SWITCH = 0x20, /* incident port is a switch node */ ++ ELS_CLID_E_PORT = 0x10, /* incident is an ISL (E) port */ ++ ELS_CLID_SEV_MASK = 0x0c, /* severity 2-bit field mask */ ++ ELS_CLID_SEV_INFO = 0x00, /* report is informational */ ++ ELS_CLID_SEV_INOP = 0x08, /* link not operational */ ++ ELS_CLID_SEV_DEG = 0x04, /* link degraded but operational */ ++ ELS_CLID_LASER = 0x02, /* subassembly is a laser */ ++ ELS_CLID_FRU = 0x01, /* format can identify a FRU */ ++}; ++ ++/* ++ * CLID incident code. ++ */ ++enum fc_els_clid_ic { ++ ELS_CLID_IC_IMPL = 1, /* implicit incident */ ++ ELS_CLID_IC_BER = 2, /* bit-error-rate threshold exceeded */ ++ ELS_CLID_IC_LOS = 3, /* loss of synch or signal */ ++ ELS_CLID_IC_NOS = 4, /* non-operational primitive sequence */ ++ ELS_CLID_IC_PST = 5, /* primitive sequence timeout */ ++ ELS_CLID_IC_INVAL = 6, /* invalid primitive sequence */ ++ ELS_CLID_IC_LOOP_TO = 7, /* loop initialization time out */ ++ ELS_CLID_IC_LIP = 8, /* receiving LIP */ ++}; ++ ++#endif /* _FC_ELS_H_ */ +diff -Naurd fcoe-utils-1.0.14.orig/include/fc_gs.h fcoe-utils-1.0.14/include/fc_gs.h +--- fcoe-utils-1.0.14.orig/include/fc_gs.h 1970-01-01 01:00:00.000000000 +0100 ++++ fcoe-utils-1.0.14/include/fc_gs.h 2011-02-23 15:05:18.302052163 +0100 +@@ -0,0 +1,96 @@ ++/* ++ * Copyright(c) 2007 Intel Corporation. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms and conditions of the GNU General Public License, ++ * version 2, as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Maintained at www.Open-FCoE.org ++ */ ++ ++#ifndef _FC_GS_H_ ++#define _FC_GS_H_ ++ ++#include ++ ++/* ++ * Fibre Channel Services - Common Transport. ++ * From T11.org FC-GS-2 Rev 5.3 November 1998. ++ */ ++ ++struct fc_ct_hdr { ++ __u8 ct_rev; /* revision */ ++ __u8 ct_in_id[3]; /* N_Port ID of original requestor */ ++ __u8 ct_fs_type; /* type of fibre channel service */ ++ __u8 ct_fs_subtype; /* subtype */ ++ __u8 ct_options; ++ __u8 _ct_resvd1; ++ __be16 ct_cmd; /* command / response code */ ++ __be16 ct_mr_size; /* maximum / residual size */ ++ __u8 _ct_resvd2; ++ __u8 ct_reason; /* reject reason */ ++ __u8 ct_explan; /* reason code explanation */ ++ __u8 ct_vendor; /* vendor unique data */ ++}; ++ ++#define FC_CT_HDR_LEN 16 /* expected sizeof (struct fc_ct_hdr) */ ++ ++enum fc_ct_rev { ++ FC_CT_REV = 1 /* common transport revision */ ++}; ++ ++/* ++ * ct_fs_type values. ++ */ ++enum fc_ct_fs_type { ++ FC_FST_ALIAS = 0xf8, /* alias service */ ++ FC_FST_MGMT = 0xfa, /* management service */ ++ FC_FST_TIME = 0xfb, /* time service */ ++ FC_FST_DIR = 0xfc, /* directory service */ ++}; ++ ++/* ++ * ct_cmd: Command / response codes ++ */ ++enum fc_ct_cmd { ++ FC_FS_RJT = 0x8001, /* reject */ ++ FC_FS_ACC = 0x8002, /* accept */ ++}; ++ ++/* ++ * FS_RJT reason codes. ++ */ ++enum fc_ct_reason { ++ FC_FS_RJT_CMD = 0x01, /* invalid command code */ ++ FC_FS_RJT_VER = 0x02, /* invalid version level */ ++ FC_FS_RJT_LOG = 0x03, /* logical error */ ++ FC_FS_RJT_IUSIZ = 0x04, /* invalid IU size */ ++ FC_FS_RJT_BSY = 0x05, /* logical busy */ ++ FC_FS_RJT_PROTO = 0x07, /* protocol error */ ++ FC_FS_RJT_UNABL = 0x09, /* unable to perform command request */ ++ FC_FS_RJT_UNSUP = 0x0b, /* command not supported */ ++}; ++ ++/* ++ * FS_RJT reason code explanations. ++ */ ++enum fc_ct_explan { ++ FC_FS_EXP_NONE = 0x00, /* no additional explanation */ ++ FC_FS_EXP_PID = 0x01, /* port ID not registered */ ++ FC_FS_EXP_PNAM = 0x02, /* port name not registered */ ++ FC_FS_EXP_NNAM = 0x03, /* node name not registered */ ++ FC_FS_EXP_COS = 0x04, /* class of service not registered */ ++ FC_FS_EXP_FTNR = 0x07, /* FC-4 types not registered */ ++ /* definitions not complete */ ++}; ++ ++#endif /* _FC_GS_H_ */ +diff -Naurd fcoe-utils-1.0.14.orig/include/fc_ns.h fcoe-utils-1.0.14/include/fc_ns.h +--- fcoe-utils-1.0.14.orig/include/fc_ns.h 1970-01-01 01:00:00.000000000 +0100 ++++ fcoe-utils-1.0.14/include/fc_ns.h 2011-02-23 15:05:18.305426345 +0100 +@@ -0,0 +1,192 @@ ++/* ++ * Copyright(c) 2007 Intel Corporation. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms and conditions of the GNU General Public License, ++ * version 2, as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Maintained at www.Open-FCoE.org ++ */ ++ ++#ifndef _FC_NS_H_ ++#define _FC_NS_H_ ++ ++#include ++ ++/* ++ * Fibre Channel Services - Name Service (dNS) ++ * From T11.org FC-GS-2 Rev 5.3 November 1998. ++ */ ++ ++/* ++ * Common-transport sub-type for Name Server. ++ */ ++#define FC_NS_SUBTYPE 2 /* fs_ct_hdr.ct_fs_subtype */ ++ ++/* ++ * Name server Requests. ++ * Note: this is an incomplete list, some unused requests are omitted. ++ */ ++enum fc_ns_req { ++ FC_NS_GA_NXT = 0x0100, /* get all next */ ++ FC_NS_GI_A = 0x0101, /* get identifiers - scope */ ++ FC_NS_GPN_ID = 0x0112, /* get port name by ID */ ++ FC_NS_GNN_ID = 0x0113, /* get node name by ID */ ++ FC_NS_GID_PN = 0x0121, /* get ID for port name */ ++ FC_NS_GID_NN = 0x0131, /* get IDs for node name */ ++ FC_NS_GID_FT = 0x0171, /* get IDs by FC4 type */ ++ FC_NS_GPN_FT = 0x0172, /* get port names by FC4 type */ ++ FC_NS_GID_PT = 0x01a1, /* get IDs by port type */ ++ FC_NS_RPN_ID = 0x0212, /* reg port name for ID */ ++ FC_NS_RNN_ID = 0x0213, /* reg node name for ID */ ++ FC_NS_RFT_ID = 0x0217, /* reg FC4 type for ID */ ++ FC_NS_RSPN_ID = 0x0218, /* reg symbolic port name */ ++ FC_NS_RFF_ID = 0x021f, /* reg FC4 Features for ID */ ++ FC_NS_RSNN_NN = 0x0239, /* reg symbolic node name */ ++}; ++ ++/* ++ * Port type values. ++ */ ++enum fc_ns_pt { ++ FC_NS_UNID_PORT = 0x00, /* unidentified */ ++ FC_NS_N_PORT = 0x01, /* N port */ ++ FC_NS_NL_PORT = 0x02, /* NL port */ ++ FC_NS_FNL_PORT = 0x03, /* F/NL port */ ++ FC_NS_NX_PORT = 0x7f, /* Nx port */ ++ FC_NS_F_PORT = 0x81, /* F port */ ++ FC_NS_FL_PORT = 0x82, /* FL port */ ++ FC_NS_E_PORT = 0x84, /* E port */ ++ FC_NS_B_PORT = 0x85, /* B port */ ++}; ++ ++/* ++ * Port type object. ++ */ ++struct fc_ns_pt_obj { ++ __u8 pt_type; ++}; ++ ++/* ++ * Port ID object ++ */ ++struct fc_ns_fid { ++ __u8 fp_flags; /* flags for responses only */ ++ __u8 fp_fid[3]; ++}; ++ ++/* ++ * fp_flags in port ID object, for responses only. ++ */ ++#define FC_NS_FID_LAST 0x80 /* last object */ ++ ++/* ++ * FC4-types object. ++ */ ++#define FC_NS_TYPES 256 /* number of possible FC-4 types */ ++#define FC_NS_BPW 32 /* bits per word in bitmap */ ++ ++struct fc_ns_fts { ++ __be32 ff_type_map[FC_NS_TYPES / FC_NS_BPW]; /* bitmap of FC-4 types */ ++}; ++ ++/* ++ * GID_PT request. ++ */ ++struct fc_ns_gid_pt { ++ __u8 fn_pt_type; ++ __u8 fn_domain_id_scope; ++ __u8 fn_area_id_scope; ++ __u8 fn_resvd; ++}; ++ ++/* ++ * GID_FT or GPN_FT request. ++ */ ++struct fc_ns_gid_ft { ++ __u8 fn_resvd; ++ __u8 fn_domain_id_scope; ++ __u8 fn_area_id_scope; ++ __u8 fn_fc4_type; ++}; ++ ++/* ++ * GPN_FT response. ++ */ ++struct fc_gpn_ft_resp { ++ __u8 fp_flags; /* see fp_flags definitions above */ ++ __u8 fp_fid[3]; /* port ID */ ++ __be32 fp_resvd; ++ __be64 fp_wwpn; /* port name */ ++}; ++ ++/* ++ * GID_PN request ++ */ ++struct fc_ns_gid_pn { ++ __be64 fn_wwpn; /* port name */ ++}; ++ ++/* ++ * GID_PN response ++ */ ++struct fc_gid_pn_resp { ++ __u8 fp_resvd; ++ __u8 fp_fid[3]; /* port ID */ ++}; ++ ++/* ++ * RFT_ID request - register FC-4 types for ID. ++ */ ++struct fc_ns_rft_id { ++ struct fc_ns_fid fr_fid; /* port ID object */ ++ struct fc_ns_fts fr_fts; /* FC-4 types object */ ++}; ++ ++/* ++ * RPN_ID request - register port name for ID. ++ * RNN_ID request - register node name for ID. ++ */ ++struct fc_ns_rn_id { ++ struct fc_ns_fid fr_fid; /* port ID object */ ++ __be64 fr_wwn; /* node name or port name */ ++} __attribute__((__packed__)); ++ ++/* ++ * RSNN_NN request - register symbolic node name ++ */ ++struct fc_ns_rsnn { ++ __be64 fr_wwn; /* node name */ ++ __u8 fr_name_len; ++ char fr_name[]; ++} __attribute__((__packed__)); ++ ++/* ++ * RSPN_ID request - register symbolic port name ++ */ ++struct fc_ns_rspn { ++ struct fc_ns_fid fr_fid; /* port ID object */ ++ __u8 fr_name_len; ++ char fr_name[]; ++} __attribute__((__packed__)); ++ ++/* ++ * RFF_ID request - register FC-4 Features for ID. ++ */ ++struct fc_ns_rff_id { ++ struct fc_ns_fid fr_fid; /* port ID object */ ++ __u8 fr_resvd[2]; ++ __u8 fr_feat; /* FC-4 Feature bits */ ++ __u8 fr_type; /* FC-4 type */ ++} __attribute__((__packed__)); ++ ++#endif /* _FC_NS_H_ */ +diff -Naurd fcoe-utils-1.0.14.orig/include/scsi_bsg_fc.h fcoe-utils-1.0.14/include/scsi_bsg_fc.h +--- fcoe-utils-1.0.14.orig/include/scsi_bsg_fc.h 1970-01-01 01:00:00.000000000 +0100 ++++ fcoe-utils-1.0.14/include/scsi_bsg_fc.h 2011-02-23 15:05:18.310052287 +0100 +@@ -0,0 +1,322 @@ ++/* ++ * FC Transport BSG Interface ++ * ++ * Copyright (C) 2008 James Smart, Emulex Corporation ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ */ ++ ++#ifndef SCSI_BSG_FC_H ++#define SCSI_BSG_FC_H ++ ++/* ++ * This file intended to be included by both kernel and user space ++ */ ++ ++#include ++ ++/* ++ * FC Transport SGIO v4 BSG Message Support ++ */ ++ ++/* Default BSG request timeout (in seconds) */ ++#define FC_DEFAULT_BSG_TIMEOUT (10 * HZ) ++ ++ ++/* ++ * Request Message Codes supported by the FC Transport ++ */ ++ ++/* define the class masks for the message codes */ ++#define FC_BSG_CLS_MASK 0xF0000000 /* find object class */ ++#define FC_BSG_HST_MASK 0x80000000 /* fc host class */ ++#define FC_BSG_RPT_MASK 0x40000000 /* fc rport class */ ++ ++ /* fc_host Message Codes */ ++#define FC_BSG_HST_ADD_RPORT (FC_BSG_HST_MASK | 0x00000001) ++#define FC_BSG_HST_DEL_RPORT (FC_BSG_HST_MASK | 0x00000002) ++#define FC_BSG_HST_ELS_NOLOGIN (FC_BSG_HST_MASK | 0x00000003) ++#define FC_BSG_HST_CT (FC_BSG_HST_MASK | 0x00000004) ++#define FC_BSG_HST_VENDOR (FC_BSG_HST_MASK | 0x000000FF) ++ ++ /* fc_rport Message Codes */ ++#define FC_BSG_RPT_ELS (FC_BSG_RPT_MASK | 0x00000001) ++#define FC_BSG_RPT_CT (FC_BSG_RPT_MASK | 0x00000002) ++ ++ ++ ++/* ++ * FC Address Identifiers in Message Structures : ++ * ++ * Whenever a command payload contains a FC Address Identifier ++ * (aka port_id), the value is effectively in big-endian ++ * order, thus the array elements are decoded as follows: ++ * element [0] is bits 23:16 of the FC Address Identifier ++ * element [1] is bits 15:8 of the FC Address Identifier ++ * element [2] is bits 7:0 of the FC Address Identifier ++ */ ++ ++ ++/* ++ * FC Host Messages ++ */ ++ ++/* FC_BSG_HST_ADDR_PORT : */ ++ ++/* Request: ++ * This message requests the FC host to login to the remote port ++ * at the specified N_Port_Id. The remote port is to be enumerated ++ * with the transport upon completion of the login. ++ */ ++struct fc_bsg_host_add_rport { ++ uint8_t reserved; ++ ++ /* FC Address Identier of the remote port to login to */ ++ uint8_t port_id[3]; ++}; ++ ++/* Response: ++ * There is no additional response data - fc_bsg_reply->result is sufficient ++ */ ++ ++ ++/* FC_BSG_HST_DEL_RPORT : */ ++ ++/* Request: ++ * This message requests the FC host to remove an enumerated ++ * remote port and to terminate the login to it. ++ * ++ * Note: The driver is free to reject this request if it desires to ++ * remain logged in with the remote port. ++ */ ++struct fc_bsg_host_del_rport { ++ uint8_t reserved; ++ ++ /* FC Address Identier of the remote port to logout of */ ++ uint8_t port_id[3]; ++}; ++ ++/* Response: ++ * There is no additional response data - fc_bsg_reply->result is sufficient ++ */ ++ ++ ++/* FC_BSG_HST_ELS_NOLOGIN : */ ++ ++/* Request: ++ * This message requests the FC_Host to send an ELS to a specific ++ * N_Port_ID. The host does not need to log into the remote port, ++ * nor does it need to enumerate the rport for further traffic ++ * (although, the FC host is free to do so if it desires). ++ */ ++struct fc_bsg_host_els { ++ /* ++ * ELS Command Code being sent (must be the same as byte 0 ++ * of the payload) ++ */ ++ uint8_t command_code; ++ ++ /* FC Address Identier of the remote port to send the ELS to */ ++ uint8_t port_id[3]; ++}; ++ ++/* Response: ++ */ ++/* fc_bsg_ctels_reply->status values */ ++#define FC_CTELS_STATUS_OK 0x00000000 ++#define FC_CTELS_STATUS_REJECT 0x00000001 ++#define FC_CTELS_STATUS_P_RJT 0x00000002 ++#define FC_CTELS_STATUS_F_RJT 0x00000003 ++#define FC_CTELS_STATUS_P_BSY 0x00000004 ++#define FC_CTELS_STATUS_F_BSY 0x00000006 ++struct fc_bsg_ctels_reply { ++ /* ++ * Note: An ELS LS_RJT may be reported in 2 ways: ++ * a) A status of FC_CTELS_STATUS_OK is returned. The caller ++ * is to look into the ELS receive payload to determine ++ * LS_ACC or LS_RJT (by contents of word 0). The reject ++ * data will be in word 1. ++ * b) A status of FC_CTELS_STATUS_REJECT is returned, The ++ * rjt_data field will contain valid data. ++ * ++ * Note: ELS LS_ACC is determined by an FC_CTELS_STATUS_OK, and ++ * the receive payload word 0 indicates LS_ACC ++ * (e.g. value is 0x02xxxxxx). ++ * ++ * Note: Similarly, a CT Reject may be reported in 2 ways: ++ * a) A status of FC_CTELS_STATUS_OK is returned. The caller ++ * is to look into the CT receive payload to determine ++ * Accept or Reject (by contents of word 2). The reject ++ * data will be in word 3. ++ * b) A status of FC_CTELS_STATUS_REJECT is returned, The ++ * rjt_data field will contain valid data. ++ * ++ * Note: x_RJT/BSY status will indicae that the rjt_data field ++ * is valid and contains the reason/explanation values. ++ */ ++ uint32_t status; /* See FC_CTELS_STATUS_xxx */ ++ ++ /* valid if status is not FC_CTELS_STATUS_OK */ ++ struct { ++ uint8_t action; /* fragment_id for CT REJECT */ ++ uint8_t reason_code; ++ uint8_t reason_explanation; ++ uint8_t vendor_unique; ++ } rjt_data; ++}; ++ ++ ++/* FC_BSG_HST_CT : */ ++ ++/* Request: ++ * This message requests that a CT Request be performed with the ++ * indicated N_Port_ID. The driver is responsible for logging in with ++ * the fabric and/or N_Port_ID, etc as per FC rules. This request does ++ * not mandate that the driver must enumerate the destination in the ++ * transport. The driver is allowed to decide whether to enumerate it, ++ * and whether to tear it down after the request. ++ */ ++struct fc_bsg_host_ct { ++ uint8_t reserved; ++ ++ /* FC Address Identier of the remote port to send the ELS to */ ++ uint8_t port_id[3]; ++ ++ /* ++ * We need words 0-2 of the generic preamble for the LLD's ++ */ ++ uint32_t preamble_word0; /* revision & IN_ID */ ++ uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ ++ uint32_t preamble_word2; /* Cmd Code, Max Size */ ++ ++}; ++/* Response: ++ * ++ * The reply structure is an fc_bsg_ctels_reply structure ++ */ ++ ++ ++/* FC_BSG_HST_VENDOR : */ ++ ++/* Request: ++ * Note: When specifying vendor_id, be sure to read the Vendor Type and ID ++ * formatting requirements specified in scsi_netlink.h ++ */ ++struct fc_bsg_host_vendor { ++ /* ++ * Identifies the vendor that the message is formatted for. This ++ * should be the recipient of the message. ++ */ ++ uint64_t vendor_id; ++ ++ /* start of vendor command area */ ++ uint32_t vendor_cmd[0]; ++}; ++ ++/* Response: ++ */ ++struct fc_bsg_host_vendor_reply { ++ /* start of vendor response area */ ++ uint32_t vendor_rsp[0]; ++}; ++ ++ ++ ++/* ++ * FC Remote Port Messages ++ */ ++ ++/* FC_BSG_RPT_ELS : */ ++ ++/* Request: ++ * This message requests that an ELS be performed with the rport. ++ */ ++struct fc_bsg_rport_els { ++ /* ++ * ELS Command Code being sent (must be the same as ++ * byte 0 of the payload) ++ */ ++ uint8_t els_code; ++}; ++ ++/* Response: ++ * ++ * The reply structure is an fc_bsg_ctels_reply structure ++ */ ++ ++ ++/* FC_BSG_RPT_CT : */ ++ ++/* Request: ++ * This message requests that a CT Request be performed with the rport. ++ */ ++struct fc_bsg_rport_ct { ++ /* ++ * We need words 0-2 of the generic preamble for the LLD's ++ */ ++ uint32_t preamble_word0; /* revision & IN_ID */ ++ uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ ++ uint32_t preamble_word2; /* Cmd Code, Max Size */ ++}; ++/* Response: ++ * ++ * The reply structure is an fc_bsg_ctels_reply structure ++ */ ++ ++ ++ ++ ++/* request (CDB) structure of the sg_io_v4 */ ++struct fc_bsg_request { ++ uint32_t msgcode; ++ union { ++ struct fc_bsg_host_add_rport h_addrport; ++ struct fc_bsg_host_del_rport h_delrport; ++ struct fc_bsg_host_els h_els; ++ struct fc_bsg_host_ct h_ct; ++ struct fc_bsg_host_vendor h_vendor; ++ ++ struct fc_bsg_rport_els r_els; ++ struct fc_bsg_rport_ct r_ct; ++ } rqst_data; ++} __attribute__((packed)); ++ ++ ++/* response (request sense data) structure of the sg_io_v4 */ ++struct fc_bsg_reply { ++ /* ++ * The completion result. Result exists in two forms: ++ * if negative, it is an -Exxx system errno value. There will ++ * be no further reply information supplied. ++ * else, it's the 4-byte scsi error result, with driver, host, ++ * msg and status fields. The per-msgcode reply structure ++ * will contain valid data. ++ */ ++ uint32_t result; ++ ++ /* If there was reply_payload, how much was recevied ? */ ++ uint32_t reply_payload_rcv_len; ++ ++ union { ++ struct fc_bsg_host_vendor_reply vendor_reply; ++ ++ struct fc_bsg_ctels_reply ctels_reply; ++ } reply_data; ++}; ++ ++ ++#endif /* SCSI_BSG_FC_H */ ++ diff --git a/fcoe-utils.spec b/fcoe-utils.spec index 255e17f..a2e0a10 100644 --- a/fcoe-utils.spec +++ b/fcoe-utils.spec @@ -1,25 +1,40 @@ Name: fcoe-utils -Version: 1.0.17 -Release: 1.1%{?dist} +Version: 1.0.18 +Release: 1%{?dist} Summary: Fibre Channel over Ethernet utilities Group: Applications/System License: GPLv2 URL: http://www.open-fcoe.org -# This source was pulled from upstream git repository -# To make a tarball, just run: -# git clone git://open-fcoe.org/fcoe/fcoe-utils.git && cd fcoe-utils -# git archive --prefix=fcoe-utils-%{version}/ v%{version} > ../fcoe-utils-%{version}.tar -# cd .. && gzip fcoe-utils-%{version} -Source0: %{name}-%{version}.tar.gz +# git://open-fcoe.org/fcoe/fcoe-utils.git +Source0: %{name}-%{version}.tar.bz2 Source1: quickstart.txt -Patch0: fcoe-utils-1.0.12-makefile-data-hook.patch -Patch1: fcoe-utils-1.0.14-no-vconfig.patch -Patch2: fcoe-include-headers.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -ExcludeArch: s390 - -BuildRequires: libhbaapi-devel lldpad-devel +# Generic Fedora patches +Patch0: fcoe-utils-1.0.17-init.patch +Patch1: fcoe-utils-1.0.17-make.patch +Patch2: fcoe-utils-1.0.18-help.patch +#Patch3: fcoe-utils-1.0.17-manpages.patch +Patch4: fcoe-utils-1.0.18-config.patch +Patch5: fcoe-utils-1.0.18-kernel-headers.patch +# Upstream patches +Patch10: fcoe-utils-1.0.18-fcoemon-Use-new-libfcoe.ko-interfaces-create-destroy.patch +Patch11: fcoe-utils-1.0.18-fcoe-utils-Add-SUPPORTED_DRIVERS-field-to-config.patch +Patch12: fcoe-utils-1.0.18-fcoe-utils-Handle-more-than-128-adapters-in-fcoeadm-.patch +Patch13: fcoe-utils-1.0.18-fcoeutils-Cancel-vlan-discovery-timer-only-when-vali.patch +Patch14: fcoe-utils-1.0.18-fcoeutils-Retry-vlan-discovery-forever-if-AUTO_VLAN-.patch +Patch15: fcoe-utils-1.0.18-fcoe-utils-Include-current-lldpad-headers.patch +Patch16: fcoe-utils-1.0.18-fcoe-utils-Add-libnl-build-dependency-for-fcoe-utils.patch +Patch17: fcoe-utils-1.0.18-fcoemon-Unexpected-FLOGI-after-fcoe-port-is-destroye.patch +Patch18: fcoe-utils-1.0.18-fcoe-utils-Drain-fip-socket-during-creation-to-disca.patch +Patch19: fcoe-utils-1.0.18-fcoe-utils-Include-fcoe_utils.h-before-scsi-scsi.h.patch +Patch20: fcoe-utils-1.0.18-fcoe-utils-Remove-unused-variable-symbolic_name_len.patch +Patch21: fcoe-utils-1.0.18-fcoe-utils-Use-iproute2-instead-of-deprecated-vconfi.patch +Patch22: fcoe-utils-1.0.18-fcoe-utils-Documentation-for-the-fcoeadm-Scan-option.patch +Patch23: fcoe-utils-1.0.18-fcoemon-Correct-wrong-error-check.patch +Patch24: fcoe-utils-1.0.18-fcoemon-Fix-2-file-descriptor-leaks.patch +Patch25: fcoe-utils-1.0.18-fcoe-utils-Avoid-freeing-uninitialized-pointer-in-fc.patch + +BuildRequires: libhbaapi-devel lldpad-devel libnl-devel BuildRequires: libtool automake autoconf Requires: lldpad libhbalinux >= 1.0.9 iproute device-mapper-multipath Requires(post): chkconfig @@ -32,38 +47,51 @@ fcoeadm - command line tool for configuring FCoE interfaces fcoemon - service to configure DCB Ethernet QOS filters, works with dcbd or lldpad %prep -%setup -q -%patch0 -p1 -b .data-hook -%patch1 -p1 -b .no-vconfig -%patch2 -p1 -b .headers +%setup -q -c -n %{name}-%{version} +# Upstream first +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +# Fedora patches on top of that... +%patch0 -p1 -b .init +%patch1 -p1 -b .make +%patch2 -p1 -b .help +#%patch3 -p1 -b .manpages +%patch4 -p1 -b .config +%patch5 -p1 -F 2 -b .kernel-headers %build ./bootstrap.sh %configure make %{?_smp_mflags} - %install -rm -rf $RPM_BUILD_ROOT -make install DESTDIR=$RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT%{_initrddir} -mv $RPM_BUILD_ROOT/etc/init.d/fcoe $RPM_BUILD_ROOT%{_initrddir}/fcoe -rm -rf $RPM_BUILD_ROOT/etc/init.d +make install DESTDIR=%{buildroot} +mkdir -p %{buildroot}%{_initrddir} +mv %{buildroot}/etc/init.d/fcoe %{buildroot}%{_initrddir}/fcoe +rm -rf %{buildroot}/etc/init.d install -m 644 %SOURCE1 quickstart.txt -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/fcoe/ -cp etc/config $RPM_BUILD_ROOT%{_sysconfdir}/fcoe/config -mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/fcoe - -install -m 755 contrib/fcc.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcc.sh -install -m 755 contrib/fcoe_edd.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoe_edd.sh -install -m 755 contrib/fcoe-setup.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoe-setup.sh -install -m 755 debug/fcoedump.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/fcoedump.sh -install -m 755 debug/dcbcheck.sh $RPM_BUILD_ROOT%{_libexecdir}/fcoe/dcbcheck.sh - - -%clean -rm -rf $RPM_BUILD_ROOT - +mkdir -p %{buildroot}%{_sysconfdir}/fcoe/ +cp etc/config %{buildroot}%{_sysconfdir}/fcoe/config +mkdir -p %{buildroot}%{_libexecdir}/fcoe +install -m 755 contrib/fcc.sh %{buildroot}%{_libexecdir}/fcoe/fcc.sh +install -m 755 contrib/fcoe_edd.sh %{buildroot}%{_libexecdir}/fcoe/fcoe_edd.sh +install -m 755 contrib/fcoe-setup.sh %{buildroot}%{_libexecdir}/fcoe/fcoe-setup.sh +install -m 755 debug/fcoedump.sh %{buildroot}%{_libexecdir}/fcoe/fcoedump.sh +install -m 755 debug/dcbcheck.sh %{buildroot}%{_libexecdir}/fcoe/dcbcheck.sh %post /sbin/chkconfig --add fcoe @@ -110,6 +138,11 @@ fi %changelog +* Wed Apr 20 2011 Petr Sabata - 1.0.18-1 +- 1.0.18 bump with latest bugfixes +- Removing ExcludeArch completely; not related for Fedora +- Buildroot cleanup + * Tue Apr 19 2011 Karsten Hopp 1.0.17-1.1 - remove excludearch ppc, required by anaconda.ppc diff --git a/sources b/sources index 7a7d749..25a46cf 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -18fc04e7bda993f8297f1106a44edb2b fcoe-utils-1.0.17.tar.gz +a6b3bb359aa59e0ec7eac2764aec5ba7 fcoe-utils-1.0.18.tar.bz2