[Stgt-devel] [PATCH 2/2] fcoe: remove older fcoe header code
michaelc at cs.wisc.edu
michaelc
Thu Jul 10 22:26:03 CEST 2008
From: Mike Christie <michaelc at cs.wisc.edu>
Just support the current format, so remove older fcoe header code.
Signed-off-by: Mike Christie <michaelc at cs.wisc.edu>
---
usr/fcoe/fc_fcoe.h | 50 ------------------------------------
usr/fcoe/fcoe_dev.c | 70 +++++++++++++++++++-------------------------------
usr/fcoe/fcoe_if.c | 1 -
3 files changed, 27 insertions(+), 94 deletions(-)
diff --git a/usr/fcoe/fc_fcoe.h b/usr/fcoe/fc_fcoe.h
index 6c883b6..27b5dbe 100644
--- a/usr/fcoe/fc_fcoe.h
+++ b/usr/fcoe/fc_fcoe.h
@@ -54,54 +54,6 @@
#define FC_FCOE_ENCAPS_ID(n) (((u_int64_t) FC_FCOE_OUI << 24) | (n))
#define FC_FCOE_DECAPS_ID(n) ((n) >> 24)
-#ifndef FCOE_T11_AUG07 /* old version */
-
-/*
- * Start of frame values.
- * For FCOE the SOF value is encoded in 4 bits by simply trimming the
- * standard RFC 3643 encapsulation values. See fc/encaps.h.
- *
- * The following macros work for class 3 and class F traffic.
- * It is still required to use net access functions to do the byte swapping.
- *
- * SOF code Normal FCOE
- * SOFf 0x28 8
- * SOFi3 0x2e e
- * SOFn3 0x36 6
- */
-#define FC_FCOE_ENCAPS_LEN_SOF(len, sof) \
- ((FC_FCOE_VER << 14) | (((len) & 0x3ff) << 4) | ((sof) & 0xf))
-#define FC_FCOE_DECAPS_VER(n) ((n) >> 14)
-#define FC_FCOE_DECAPS_LEN(n) (((n) >> 4) & 0x3ff)
-#define FC_FCOE_DECAPS_SOF(n) \
- (((n) & 0x8) ? (((n) & 0xf) + 0x20) : (((n) & 0xf) + 0x30))
-
-/*
- * FCoE frame header
- *
- * NB: This is the old version, defined before August 2007.
- *
- * This follows the VLAN header, which includes the ethertype.
- * The version is the MS 2 bits, followed by the 10-bit length (in 32b words),
- * followed by the 4-bit encoded SOF as the LSBs.
- */
-struct fcoe_hdr {
- net16_t fcoe_plen; /* fc frame len and SOF */
-};
-
-/*
- * FCoE CRC & EOF
- * NB: This is the old version, defined before August 2007.
- */
-struct fcoe_crc_eof {
- u_int32_t fcoe_crc32; /* CRC for FC packet */
- net8_t fcoe_eof; /* EOF from RFC 3643 */
-} __attribute__((packed));
-
-#define FCOE_CRC_LEN 4 /* byte length of the FC CRC */
-
-#else /* FCOE_T11_AUG07 */
-
/*
* FCoE frame header - 14 bytes
*
@@ -126,8 +78,6 @@ struct fcoe_crc_eof {
net8_t fcoe_resvd[3]; /* reserved - send zero and ignore */
} __attribute__((packed));
-#endif /* FCOE_T11_AUG07 */
-
/*
* Store OUI + DID into MAC address field.
*/
diff --git a/usr/fcoe/fcoe_dev.c b/usr/fcoe/fcoe_dev.c
index 96d2cdb..0027e79 100644
--- a/usr/fcoe/fcoe_dev.c
+++ b/usr/fcoe/fcoe_dev.c
@@ -36,7 +36,6 @@
#include "fc_types.h"
#include "fc_frame.h"
#include "fc_encaps.h"
-#define FCOE_T11_AUG07 /* use new FCoE version */
#include "fc_fcoe.h"
#include "fc_fcoe_old.h"
#include "fcdev.h"
@@ -127,6 +126,7 @@ int fcoe_xmit(struct fcdev *fdev, struct fc_frame *fp)
struct fcoe_crc_eof *cp;
int wlen, ret, total;
struct ethhdr *eh;
+ struct fcoe_hdr *hp;
dprintf("op %x\n", fc_frame_payload_op(fp));
@@ -164,8 +164,6 @@ int fcoe_xmit(struct fcdev *fdev, struct fc_frame *fp)
*/
hlen = fc->fcoe_hlen;
tlen = sizeof(struct fcoe_crc_eof);
- if (hlen == sizeof(struct fcoe_hdr_old))
- tlen = sizeof(struct fcoe_crc_eof_old);
cp = (struct fcoe_crc_eof *)((char *)fh + fp->fr_len);
@@ -192,20 +190,11 @@ int fcoe_xmit(struct fcdev *fdev, struct fc_frame *fp)
eh->h_proto = htons(ETH_P_FCOE);
- if (hlen == sizeof(struct fcoe_hdr)) {
- struct fcoe_hdr *hp;
-
- hp = (struct fcoe_hdr *)(eh + 1);
- memset(hp, 0, sizeof(*hp));
- if (FC_FCOE_VER)
- FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER);
- hp->fcoe_sof = sof;
- } else {
- struct fcoe_hdr_old *ohp;
-
- ohp = (struct fcoe_hdr_old *)(eh + 1);
- net16_put(&ohp->fcoe_plen, FC_FCOE_ENCAPS_LEN_SOF(wlen, sof));
- }
+ hp = (struct fcoe_hdr *)(eh + 1);
+ memset(hp, 0, sizeof(*hp));
+ if (FC_FCOE_VER)
+ FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER);
+ hp->fcoe_sof = sof;
total = fp->fr_len + tlen + sizeof(*eh) + hlen;
ret = write(fdev->fd, eh, total);
@@ -223,11 +212,11 @@ int fcoe_rcv(struct fcdev *fdev)
struct fcoe_softc *fc;
struct ethhdr *eh;
uint64_t mac = 0;
- enum fc_sof sof;
int ret;
struct fcoe_dev_stats *stats;
struct fcoe_crc_eof *cp;
struct fc_frame *fp;
+ struct fcoe_hdr *hp;
fc = fdev->drv_priv;
@@ -254,31 +243,26 @@ int fcoe_rcv(struct fcdev *fdev)
mac = net48_get((net48_t *)eh->h_source);
hlen = fc->fcoe_hlen;
- if (hlen == sizeof(struct fcoe_hdr)) {
- struct fcoe_hdr *hp = (struct fcoe_hdr *)(eh + 1);
-
- if (FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER) {
- eprintf("unknown FCoE version %x\n",
- FC_FCOE_DECAPS_VER(hp));
- stats->ErrorFrames++;
- free(buf);
- goto out;
- }
- sof = hp->fcoe_sof;
- fr_len = ret -(sizeof(*eh) +
- sizeof(*hp) + sizeof(struct fcoe_crc_eof));
- tlen = sizeof(struct fcoe_crc_eof);
- } else {
- struct fcoe_hdr_old *fchp = (struct fcoe_hdr_old *)(eh + 1);
- u_int len;
-
- len = net16_get(&fchp->fcoe_plen);
- fr_len = FC_FCOE_DECAPS_LEN(len);
- fr_len = fr_len * FCOE_WORD_TO_BYTE;
- sof = FC_FCOE_DECAPS_SOF(len);
- fr_len -= sizeof(cp->fcoe_crc32);
- tlen = sizeof(struct fcoe_crc_eof_old);
+ if (hlen != sizeof(struct fcoe_hdr)) {
+ eprintf("Wrong fcoe header size. Got %u, but should "
+ "be %u. Make sure you are using a initiator that "
+ "is using the current header format\n",
+ hlen, sizeof(struct fcoe_hdr));
+ stats->ErrorFrames++;
+ goto out;
+ }
+
+ hp = (struct fcoe_hdr *)(eh + 1);
+ if (FC_FCOE_DECAPS_VER(hp) != FC_FCOE_VER) {
+ eprintf("unknown FCoE version %x\n",
+ FC_FCOE_DECAPS_VER(hp));
+ stats->ErrorFrames++;
+ free(buf);
+ goto out;
}
+ fr_len = ret -(sizeof(*eh) +
+ sizeof(*hp) + sizeof(struct fcoe_crc_eof));
+ tlen = sizeof(struct fcoe_crc_eof);
if (fr_len + tlen > ret) {
eprintf("short frame fr_len %x len %x\n",
@@ -296,7 +280,7 @@ int fcoe_rcv(struct fcdev *fdev)
fp->fr_len = fr_len;
cp = (struct fcoe_crc_eof *)((char *)fp->fr_hdr + fr_len);
fp->fr_eof = cp->fcoe_eof;
- fp->fr_sof = sof;
+ fp->fr_sof = hp->fcoe_sof;
/*
* Check the CRC here, unless it's solicited data for SCSI.
diff --git a/usr/fcoe/fcoe_if.c b/usr/fcoe/fcoe_if.c
index 68be336..9470f70 100644
--- a/usr/fcoe/fcoe_if.c
+++ b/usr/fcoe/fcoe_if.c
@@ -38,7 +38,6 @@
#include "fc_types.h"
#include "fc_frame.h"
#include "fc_encaps.h"
-#define FCOE_T11_AUG07 /* use new FCoE version */
#include "fc_fcoe.h"
#include "fc_fcoe_old.h"
#include "fc_fs.h"
--
1.5.5.1
More information about the stgt
mailing list