* [PATCH 0/6] fcoe: VN2VN target mode fixes
@ 2016-07-04 8:29 Hannes Reinecke
2016-07-04 8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
` (6 more replies)
0 siblings, 7 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke
Hi all,
When setting up a VN2VN FCoE target there is no real need to
run fcoeadm, especially if DCB is disabled.
So this patchset implements a VIP VLAN responder which can be
enabled by writing to the sysfs attribute 'fip_vlan_responder'.
Additionally there are some fixes for VN2VN mode, most notably
the multicast address update when changing modes.
As usual, comments and reviews are welcome.
Hannes Reinecke (6):
fc_fip: Update to latest FC-BB-6 draft
fcoe: use enum for fip_mode
fcoe: fcoe->realdev is always set
fcoe: Update multicast addresses on FIP mode change
fcoe: implement FIP VLAN responder
fcoe: Use default VLAN for FIP VLAN discovery
drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 6 +-
drivers/scsi/fcoe/fcoe.c | 95 ++++++++++++++--
drivers/scsi/fcoe/fcoe.h | 1 +
drivers/scsi/fcoe/fcoe_ctlr.c | 234 +++++++++++++++++++++++++++++++++++++-
drivers/scsi/fcoe/fcoe_sysfs.c | 39 +++++++
drivers/scsi/fnic/fnic_fcs.c | 6 +-
drivers/scsi/fnic/fnic_fip.h | 8 --
include/scsi/fc/fc_fip.h | 21 +++-
include/scsi/libfc.h | 1 +
include/scsi/libfcoe.h | 19 ++--
10 files changed, 391 insertions(+), 39 deletions(-)
--
1.8.5.6
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
@ 2016-07-04 8:29 ` Hannes Reinecke
2016-07-04 10:12 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
` (5 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Hannes Reinecke
Update to latest FC-BB-6 draft to include FIP VN2VN VLAN notifications
and additional flags.
Signed-off-by: Hannes Reinecke <hare@suse.com>
---
drivers/scsi/fcoe/fcoe_ctlr.c | 8 ++++----
drivers/scsi/fnic/fnic_fcs.c | 4 ++--
drivers/scsi/fnic/fnic_fip.h | 8 --------
include/scsi/fc/fc_fip.h | 21 +++++++++++++++++----
4 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index ada4bde..34b2b43 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -991,7 +991,7 @@ static int fcoe_ctlr_parse_adv(struct fcoe_ctlr *fip,
LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
"in FIP adv\n", desc->fip_dtype);
/* standard says ignore unknown descriptors >= 128 */
- if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
+ if (desc->fip_dtype < FIP_DT_NON_CRITICAL)
return -EINVAL;
break;
}
@@ -1232,7 +1232,7 @@ static void fcoe_ctlr_recv_els(struct fcoe_ctlr *fip, struct sk_buff *skb)
LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
"in FIP adv\n", desc->fip_dtype);
/* standard says ignore unknown descriptors >= 128 */
- if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
+ if (desc->fip_dtype < FIP_DT_NON_CRITICAL)
goto drop;
if (desc_cnt <= 2) {
LIBFCOE_FIP_DBG(fip, "FIP descriptors "
@@ -1410,7 +1410,7 @@ static void fcoe_ctlr_recv_clr_vlink(struct fcoe_ctlr *fip,
break;
default:
/* standard says ignore unknown descriptors >= 128 */
- if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
+ if (desc->fip_dtype < FIP_DT_NON_CRITICAL)
goto err;
break;
}
@@ -2338,7 +2338,7 @@ static int fcoe_ctlr_vn_parse(struct fcoe_ctlr *fip,
LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
"in FIP probe\n", dtype);
/* standard says ignore unknown descriptors >= 128 */
- if (dtype < FIP_DT_VENDOR_BASE)
+ if (dtype < FIP_DT_NON_CRITICAL)
return -EINVAL;
break;
}
diff --git a/drivers/scsi/fnic/fnic_fcs.c b/drivers/scsi/fnic/fnic_fcs.c
index 67669a9..fe402d0 100644
--- a/drivers/scsi/fnic/fnic_fcs.c
+++ b/drivers/scsi/fnic/fnic_fcs.c
@@ -359,7 +359,7 @@ static void fnic_fcoe_send_vlan_req(struct fnic *fnic)
vlan->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
vlan->fip.fip_op = htons(FIP_OP_VLAN);
- vlan->fip.fip_subcode = FIP_SC_VL_REQ;
+ vlan->fip.fip_subcode = FIP_SC_VL_NOTE;
vlan->fip.fip_dl_len = htons(sizeof(vlan->desc) / FIP_BPW);
vlan->desc.mac.fd_desc.fip_dtype = FIP_DT_MAC;
@@ -551,7 +551,7 @@ static int fnic_fcoe_handle_fip_frame(struct fnic *fnic, struct sk_buff *skb)
goto drop;
/* pass it on to fcoe */
ret = 1;
- } else if (op == FIP_OP_VLAN && sub == FIP_SC_VL_REP) {
+ } else if (op == FIP_OP_VLAN && sub == FIP_SC_VL_NOTE) {
/* set the vlan as used */
fnic_fcoe_process_vlan_resp(fnic, skb);
ret = 0;
diff --git a/drivers/scsi/fnic/fnic_fip.h b/drivers/scsi/fnic/fnic_fip.h
index 87e74c2..7761f33 100644
--- a/drivers/scsi/fnic/fnic_fip.h
+++ b/drivers/scsi/fnic/fnic_fip.h
@@ -26,14 +26,6 @@
#define FINC_MAX_FLOGI_REJECTS 8
-/*
- * FIP_DT_VLAN descriptor.
- */
-struct fip_vlan_desc {
- struct fip_desc fd_desc;
- __be16 fd_vlan;
-} __attribute__((packed));
-
struct vlan {
__be16 vid;
__be16 type;
diff --git a/include/scsi/fc/fc_fip.h b/include/scsi/fc/fc_fip.h
index ae25d4a..9710254 100644
--- a/include/scsi/fc/fc_fip.h
+++ b/include/scsi/fc/fc_fip.h
@@ -22,7 +22,7 @@
/*
* This version is based on:
* http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
- * and T11 FC-BB-6 10-019v4.pdf (June 2010 VN2VN proposal)
+ * and T11 FC-BB-6 13-091v5.pdf (December 2013 VN2VN proposal)
*/
#define FIP_DEF_PRI 128 /* default selection priority */
@@ -109,8 +109,9 @@ enum fip_reset_subcode {
* Subcodes for FIP_OP_VLAN.
*/
enum fip_vlan_subcode {
- FIP_SC_VL_REQ = 1, /* request */
- FIP_SC_VL_REP = 2, /* reply */
+ FIP_SC_VL_REQ = 1, /* vlan request */
+ FIP_SC_VL_NOTE = 2, /* vlan notification */
+ FIP_SC_VL_VN2VN_NOTE = 3, /* VN2VN vlan notification */
};
/*
@@ -130,6 +131,8 @@ enum fip_vn2vn_subcode {
enum fip_flag {
FIP_FL_FPMA = 0x8000, /* supports FPMA fabric-provided MACs */
FIP_FL_SPMA = 0x4000, /* supports SPMA server-provided MACs */
+ FIP_FL_FCF = 0x0020, /* originated from a controlling FCF */
+ FIP_FL_FDF = 0x0010, /* originated from an FDF */
FIP_FL_REC_OR_P2P = 0x0008, /* configured addr or point-to-point */
FIP_FL_AVAIL = 0x0004, /* available for FLOGI/ELP */
FIP_FL_SOL = 0x0002, /* this is a solicited message */
@@ -161,7 +164,9 @@ enum fip_desc_type {
FIP_DT_VLAN = 14, /* vlan number */
FIP_DT_FC4F = 15, /* FC-4 features */
FIP_DT_LIMIT, /* max defined desc_type + 1 */
- FIP_DT_VENDOR_BASE = 128, /* first vendor-specific desc_type */
+ FIP_DT_NON_CRITICAL = 128, /* First non-critical descriptor */
+ FIP_DT_CLR_VLINKS = 128, /* Clear virtual links reason code */
+ FIP_DT_VENDOR_BASE = 241, /* first vendor-specific desc_type */
};
/*
@@ -259,6 +264,14 @@ enum fip_fka_flags {
/* FIP_DT_FKA flags */
/*
+ * FIP_DT_VLAN descriptor
+ */
+struct fip_vlan_desc {
+ struct fip_desc fd_desc;
+ __be16 fd_vlan; /* Note: highest 4 bytes are unused */
+} __attribute__((packed));
+
+/*
* FIP_DT_FC4F - FC-4 features.
*/
struct fip_fc4_feat {
--
1.8.5.6
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 2/6] fcoe: use enum for fip_mode
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
2016-07-04 8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
@ 2016-07-04 8:29 ` Hannes Reinecke
2016-07-04 10:15 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
` (4 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Hannes Reinecke
The FIP mode is independent on the FIP state machine, so use a
separate enum for that instead of overloading it with state
machine values.
Signed-off-by: Hannes Reinecke <hare@suse.com>
---
drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 6 +++---
drivers/scsi/fcoe/fcoe.c | 6 +++---
drivers/scsi/fcoe/fcoe_ctlr.c | 2 +-
drivers/scsi/fnic/fnic_fcs.c | 2 +-
include/scsi/libfcoe.h | 14 ++++++++------
5 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
index d6800af..a5052dd 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
@@ -57,7 +57,7 @@ static struct scsi_host_template bnx2fc_shost_template;
static struct fc_function_template bnx2fc_transport_function;
static struct fcoe_sysfs_function_template bnx2fc_fcoe_sysfs_templ;
static struct fc_function_template bnx2fc_vport_xport_function;
-static int bnx2fc_create(struct net_device *netdev, enum fip_state fip_mode);
+static int bnx2fc_create(struct net_device *netdev, enum fip_mode fip_mode);
static void __bnx2fc_destroy(struct bnx2fc_interface *interface);
static int bnx2fc_destroy(struct net_device *net_device);
static int bnx2fc_enable(struct net_device *netdev);
@@ -2260,7 +2260,7 @@ enum bnx2fc_create_link_state {
* Returns: 0 for success
*/
static int _bnx2fc_create(struct net_device *netdev,
- enum fip_state fip_mode,
+ enum fip_mode fip_mode,
enum bnx2fc_create_link_state link_state)
{
struct fcoe_ctlr_device *cdev;
@@ -2412,7 +2412,7 @@ mod_err:
*
* Returns: 0 for success
*/
-static int bnx2fc_create(struct net_device *netdev, enum fip_state fip_mode)
+static int bnx2fc_create(struct net_device *netdev, enum fip_mode fip_mode)
{
return _bnx2fc_create(netdev, fip_mode, BNX2FC_CREATE_LINK_UP);
}
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index f7c7ccc..9c3742d 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -107,7 +107,7 @@ static int fcoe_dcb_app_notification(struct notifier_block *notifier,
ulong event, void *ptr);
static bool fcoe_match(struct net_device *netdev);
-static int fcoe_create(struct net_device *netdev, enum fip_state fip_mode);
+static int fcoe_create(struct net_device *netdev, enum fip_mode fip_mode);
static int fcoe_destroy(struct net_device *netdev);
static int fcoe_enable(struct net_device *netdev);
static int fcoe_disable(struct net_device *netdev);
@@ -2133,7 +2133,7 @@ enum fcoe_create_link_state {
* consolidation of code can be done when that interface is
* removed.
*/
-static int _fcoe_create(struct net_device *netdev, enum fip_state fip_mode,
+static int _fcoe_create(struct net_device *netdev, enum fip_mode fip_mode,
enum fcoe_create_link_state link_state)
{
int rc = 0;
@@ -2222,7 +2222,7 @@ out:
*
* Returns: 0 for success
*/
-static int fcoe_create(struct net_device *netdev, enum fip_state fip_mode)
+static int fcoe_create(struct net_device *netdev, enum fip_mode fip_mode)
{
return _fcoe_create(netdev, fip_mode, FCOE_CREATE_LINK_UP);
}
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 34b2b43..26a0685 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -2864,7 +2864,7 @@ unlock:
* when nothing is happening.
*/
static void fcoe_ctlr_mode_set(struct fc_lport *lport, struct fcoe_ctlr *fip,
- enum fip_state fip_mode)
+ enum fip_mode fip_mode)
{
void *priv;
diff --git a/drivers/scsi/fnic/fnic_fcs.c b/drivers/scsi/fnic/fnic_fcs.c
index fe402d0..0d532ae 100644
--- a/drivers/scsi/fnic/fnic_fcs.c
+++ b/drivers/scsi/fnic/fnic_fcs.c
@@ -1308,7 +1308,7 @@ void fnic_handle_fip_timer(struct fnic *fnic)
}
spin_unlock_irqrestore(&fnic->fnic_lock, flags);
- if (fnic->ctlr.mode == FIP_ST_NON_FIP)
+ if (fnic->ctlr.mode == FIP_MODE_NON_FIP)
return;
spin_lock_irqsave(&fnic->vlans_lock, flags);
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index c6fbbb6..bcc5c3e 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
@@ -78,10 +78,12 @@ enum fip_state {
* The mode is the state that is to be entered after link up.
* It must not change after fcoe_ctlr_init() sets it.
*/
-#define FIP_MODE_AUTO FIP_ST_AUTO
-#define FIP_MODE_NON_FIP FIP_ST_NON_FIP
-#define FIP_MODE_FABRIC FIP_ST_ENABLED
-#define FIP_MODE_VN2VN FIP_ST_VNMP_START
+enum fip_mode {
+ FIP_MODE_AUTO = FIP_ST_AUTO,
+ FIP_MODE_NON_FIP,
+ FIP_MODE_FABRIC,
+ FIP_MODE_VN2VN,
+};
/**
* struct fcoe_ctlr - FCoE Controller and FIP state
@@ -124,7 +126,7 @@ enum fip_state {
*/
struct fcoe_ctlr {
enum fip_state state;
- enum fip_state mode;
+ enum fip_mode mode;
struct fc_lport *lp;
struct fcoe_fcf *sel_fcf;
struct list_head fcfs;
@@ -311,7 +313,7 @@ struct fcoe_transport {
struct list_head list;
bool (*match) (struct net_device *device);
int (*alloc) (struct net_device *device);
- int (*create) (struct net_device *device, enum fip_state fip_mode);
+ int (*create) (struct net_device *device, enum fip_mode fip_mode);
int (*destroy) (struct net_device *device);
int (*enable) (struct net_device *device);
int (*disable) (struct net_device *device);
--
1.8.5.6
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/6] fcoe: fcoe->realdev is always set
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
2016-07-04 8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
2016-07-04 8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
@ 2016-07-04 8:29 ` Hannes Reinecke
2016-07-04 10:16 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
` (3 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Hannes Reinecke
'->realdev' is always set, so this check is pointless.
Signed-off-by: Hannes Reinecke <hare@suse.com>
---
drivers/scsi/fcoe/fcoe.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 9c3742d..41c67e5 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -770,9 +770,6 @@ static void fcoe_fdmi_info(struct fc_lport *lport, struct net_device *netdev)
fcoe = port->priv;
realdev = fcoe->realdev;
- if (!realdev)
- return;
-
/* No FDMI state m/c for NPIV ports */
if (lport->vport)
return;
--
1.8.5.6
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
` (2 preceding siblings ...)
2016-07-04 8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
@ 2016-07-04 8:29 ` Hannes Reinecke
2016-07-04 10:16 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
` (2 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Hannes Reinecke
When the FIP mode is changed we need to update the multicast
addresses to ensure we get the correct frames.
Signed-off-by: Hannes Reinecke <hare@suse.com>
---
drivers/scsi/fcoe/fcoe.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 41c67e5..61eda74 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -115,7 +115,7 @@ static int fcoe_disable(struct net_device *netdev);
/* fcoe_syfs control interface handlers */
static int fcoe_ctlr_alloc(struct net_device *netdev);
static int fcoe_ctlr_enabled(struct fcoe_ctlr_device *cdev);
-
+static void fcoe_ctlr_mode(struct fcoe_ctlr_device *ctlr_dev);
static struct fc_seq *fcoe_elsct_send(struct fc_lport *,
u32 did, struct fc_frame *,
@@ -146,8 +146,9 @@ static void fcoe_set_vport_symbolic_name(struct fc_vport *);
static void fcoe_set_port_id(struct fc_lport *, u32, struct fc_frame *);
static void fcoe_fcf_get_vlan_id(struct fcoe_fcf_device *);
+
static struct fcoe_sysfs_function_template fcoe_sysfs_templ = {
- .set_fcoe_ctlr_mode = fcoe_ctlr_set_fip_mode,
+ .set_fcoe_ctlr_mode = fcoe_ctlr_mode,
.set_fcoe_ctlr_enabled = fcoe_ctlr_enabled,
.get_fcoe_ctlr_link_fail = fcoe_ctlr_get_lesb,
.get_fcoe_ctlr_vlink_fail = fcoe_ctlr_get_lesb,
@@ -1976,6 +1977,32 @@ static int fcoe_ctlr_enabled(struct fcoe_ctlr_device *cdev)
}
/**
+ * fcoe_ctlr_mode() - Switch FIP mode
+ * @cdev: The FCoE Controller that is being modified
+ *
+ * When the FIP mode has been changed we need to update
+ * the multicast addresses to ensure we get the correct
+ * frames.
+ */
+static void fcoe_ctlr_mode(struct fcoe_ctlr_device *ctlr_dev)
+{
+ struct fcoe_ctlr *ctlr = fcoe_ctlr_device_priv(ctlr_dev);
+ struct fcoe_interface *fcoe = fcoe_ctlr_priv(ctlr);
+
+ if (ctlr_dev->mode == FIP_CONN_TYPE_VN2VN &&
+ ctlr->mode != FIP_MODE_VN2VN) {
+ dev_mc_del(fcoe->netdev, FIP_ALL_ENODE_MACS);
+ dev_mc_add(fcoe->netdev, FIP_ALL_VN2VN_MACS);
+ dev_mc_add(fcoe->netdev, FIP_ALL_P2P_MACS);
+ } else if (ctlr->mode != FIP_MODE_FABRIC) {
+ dev_mc_del(fcoe->netdev, FIP_ALL_VN2VN_MACS);
+ dev_mc_del(fcoe->netdev, FIP_ALL_P2P_MACS);
+ dev_mc_add(fcoe->netdev, FIP_ALL_ENODE_MACS);
+ }
+ fcoe_ctlr_set_fip_mode(ctlr_dev);
+}
+
+/**
* fcoe_destroy() - Destroy a FCoE interface
* @netdev : The net_device object the Ethernet interface to create on
*
--
1.8.5.6
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 5/6] fcoe: implement FIP VLAN responder
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
` (3 preceding siblings ...)
2016-07-04 8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
@ 2016-07-04 8:29 ` Hannes Reinecke
2016-07-04 10:05 ` Johannes Thumshirn
2016-07-25 7:31 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
2016-07-14 2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
6 siblings, 2 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Hannes Reinecke
When running in VN2VN mode there is no central instance which
would send out any FIP VLAN discovery notifications. So this
patch adds a new sysfs attribute 'fip_vlan_responder' which
will activate a FIP VLAN discovery responder.
Signed-off-by: Hannes Reinecke <hare@suse.com>
---
drivers/scsi/fcoe/fcoe.c | 6 ++
drivers/scsi/fcoe/fcoe_ctlr.c | 224 +++++++++++++++++++++++++++++++++++++++++
drivers/scsi/fcoe/fcoe_sysfs.c | 39 +++++++
include/scsi/libfc.h | 1 +
include/scsi/libfcoe.h | 5 +-
5 files changed, 274 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 61eda74..c8a4305 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -673,6 +673,12 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev)
fcoe = port->priv;
ctlr = fcoe_to_ctlr(fcoe);
+ /* Figure out the VLAN ID, if any */
+ if (netdev->priv_flags & IFF_802_1Q_VLAN)
+ lport->vlan = vlan_dev_vlan_id(netdev);
+ else
+ lport->vlan = 0;
+
/*
* Determine max frame size based on underlying device and optional
* user-configured limit. If the MFS is too low, fcoe_link_ok()
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 26a0685..32988e6 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -59,6 +59,8 @@ static int fcoe_ctlr_vn_recv(struct fcoe_ctlr *, struct sk_buff *);
static void fcoe_ctlr_vn_timeout(struct fcoe_ctlr *);
static int fcoe_ctlr_vn_lookup(struct fcoe_ctlr *, u32, u8 *);
+static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *, struct sk_buff *);
+
static u8 fcoe_all_fcfs[ETH_ALEN] = FIP_ALL_FCF_MACS;
static u8 fcoe_all_enode[ETH_ALEN] = FIP_ALL_ENODE_MACS;
static u8 fcoe_all_vn2vn[ETH_ALEN] = FIP_ALL_VN2VN_MACS;
@@ -149,6 +151,7 @@ void fcoe_ctlr_init(struct fcoe_ctlr *fip, enum fip_state mode)
{
fcoe_ctlr_set_state(fip, FIP_ST_LINK_WAIT);
fip->mode = mode;
+ fip->fip_resp = false;
INIT_LIST_HEAD(&fip->fcfs);
mutex_init(&fip->ctlr_mutex);
spin_lock_init(&fip->ctlr_lock);
@@ -1513,6 +1516,7 @@ static int fcoe_ctlr_recv_handler(struct fcoe_ctlr *fip, struct sk_buff *skb)
struct fip_header *fiph;
struct ethhdr *eh;
enum fip_state state;
+ bool fip_vlan_resp = false;
u16 op;
u8 sub;
@@ -1546,11 +1550,17 @@ static int fcoe_ctlr_recv_handler(struct fcoe_ctlr *fip, struct sk_buff *skb)
state = FIP_ST_ENABLED;
LIBFCOE_FIP_DBG(fip, "Using FIP mode\n");
}
+ fip_vlan_resp = fip->fip_resp;
mutex_unlock(&fip->ctlr_mutex);
if (fip->mode == FIP_MODE_VN2VN && op == FIP_OP_VN2VN)
return fcoe_ctlr_vn_recv(fip, skb);
+ if (fip_vlan_resp && op == FIP_OP_VLAN) {
+ LIBFCOE_FIP_DBG(fip, "fip vlan discovery\n");
+ return fcoe_ctlr_vlan_recv(fip, skb);
+ }
+
if (state != FIP_ST_ENABLED && state != FIP_ST_VNMP_UP &&
state != FIP_ST_VNMP_CLAIM)
goto drop;
@@ -2704,6 +2714,220 @@ drop:
}
/**
+ * fcoe_ctlr_vlan_parse - parse vlan discovery request or response
+ * @fip: The FCoE controller
+ * @skb: incoming packet
+ * @rdata: buffer for resulting parsed VLAN entry plus fcoe_rport
+ *
+ * Returns non-zero error number on error.
+ * Does not consume the packet.
+ */
+static int fcoe_ctlr_vlan_parse(struct fcoe_ctlr *fip,
+ struct sk_buff *skb,
+ struct fc_rport_priv *rdata)
+{
+ struct fip_header *fiph;
+ struct fip_desc *desc = NULL;
+ struct fip_mac_desc *macd = NULL;
+ struct fip_wwn_desc *wwn = NULL;
+ struct fcoe_rport *frport;
+ size_t rlen;
+ size_t dlen;
+ u32 desc_mask = 0;
+ u32 dtype;
+ u8 sub;
+
+ memset(rdata, 0, sizeof(*rdata) + sizeof(*frport));
+ frport = fcoe_ctlr_rport(rdata);
+
+ fiph = (struct fip_header *)skb->data;
+ frport->flags = ntohs(fiph->fip_flags);
+
+ sub = fiph->fip_subcode;
+ switch (sub) {
+ case FIP_SC_VL_REQ:
+ desc_mask = BIT(FIP_DT_MAC) | BIT(FIP_DT_NAME);
+ break;
+ default:
+ LIBFCOE_FIP_DBG(fip, "vn_parse unknown subcode %u\n", sub);
+ return -EINVAL;
+ }
+
+ rlen = ntohs(fiph->fip_dl_len) * 4;
+ if (rlen + sizeof(*fiph) > skb->len)
+ return -EINVAL;
+
+ desc = (struct fip_desc *)(fiph + 1);
+ while (rlen > 0) {
+ dlen = desc->fip_dlen * FIP_BPW;
+ if (dlen < sizeof(*desc) || dlen > rlen)
+ return -EINVAL;
+
+ dtype = desc->fip_dtype;
+ if (dtype < 32) {
+ if (!(desc_mask & BIT(dtype))) {
+ LIBFCOE_FIP_DBG(fip,
+ "unexpected or duplicated desc "
+ "desc type %u in "
+ "FIP VN2VN subtype %u\n",
+ dtype, sub);
+ return -EINVAL;
+ }
+ desc_mask &= ~BIT(dtype);
+ }
+
+ switch (dtype) {
+ case FIP_DT_MAC:
+ if (dlen != sizeof(struct fip_mac_desc))
+ goto len_err;
+ macd = (struct fip_mac_desc *)desc;
+ if (!is_valid_ether_addr(macd->fd_mac)) {
+ LIBFCOE_FIP_DBG(fip,
+ "Invalid MAC addr %pM in FIP VN2VN\n",
+ macd->fd_mac);
+ return -EINVAL;
+ }
+ memcpy(frport->enode_mac, macd->fd_mac, ETH_ALEN);
+ break;
+ case FIP_DT_NAME:
+ if (dlen != sizeof(struct fip_wwn_desc))
+ goto len_err;
+ wwn = (struct fip_wwn_desc *)desc;
+ rdata->ids.node_name = get_unaligned_be64(&wwn->fd_wwn);
+ break;
+ default:
+ LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
+ "in FIP probe\n", dtype);
+ /* standard says ignore unknown descriptors >= 128 */
+ if (dtype < FIP_DT_NON_CRITICAL)
+ return -EINVAL;
+ break;
+ }
+ desc = (struct fip_desc *)((char *)desc + dlen);
+ rlen -= dlen;
+ }
+ return 0;
+
+len_err:
+ LIBFCOE_FIP_DBG(fip, "FIP length error in descriptor type %x len %zu\n",
+ dtype, dlen);
+ return -EINVAL;
+}
+
+/**
+ * fcoe_ctlr_vlan_send() - Send a FIP VLAN Notification
+ * @fip: The FCoE controller
+ * @sub: sub-opcode for vlan notification or vn2vn vlan notification
+ * @dest: The destination Ethernet MAC address
+ * @min_len: minimum size of the Ethernet payload to be sent
+ */
+static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
+ enum fip_vlan_subcode sub,
+ const u8 *dest)
+{
+ struct sk_buff *skb;
+ struct fip_frame {
+ struct ethhdr eth;
+ struct fip_header fip;
+ struct fip_mac_desc mac;
+ struct fip_vlan_desc vlan;
+ } __packed * frame;
+ size_t len;
+ size_t dlen;
+
+ len = sizeof(*frame);
+ dlen = sizeof(frame->mac) + sizeof(frame->vlan);
+ len = max(len, sizeof(struct ethhdr));
+
+ skb = dev_alloc_skb(len);
+ if (!skb)
+ return;
+
+ LIBFCOE_FIP_DBG(fip, "fip %s vlan notification, vlan %d\n",
+ fip->mode == FIP_MODE_VN2VN ? "vn2vn" : "fcf",
+ fip->lp->vlan);
+
+ frame = (struct fip_frame *)skb->data;
+ memset(frame, 0, len);
+ memcpy(frame->eth.h_dest, dest, ETH_ALEN);
+
+ memcpy(frame->eth.h_source, fip->ctl_src_addr, ETH_ALEN);
+ frame->eth.h_proto = htons(ETH_P_FIP);
+
+ frame->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
+ frame->fip.fip_op = htons(FIP_OP_VLAN);
+ frame->fip.fip_subcode = sub;
+ frame->fip.fip_dl_len = htons(dlen / FIP_BPW);
+
+ frame->mac.fd_desc.fip_dtype = FIP_DT_MAC;
+ frame->mac.fd_desc.fip_dlen = sizeof(frame->mac) / FIP_BPW;
+ memcpy(frame->mac.fd_mac, fip->ctl_src_addr, ETH_ALEN);
+
+ frame->vlan.fd_desc.fip_dtype = FIP_DT_VLAN;
+ frame->vlan.fd_desc.fip_dlen = sizeof(frame->vlan) / FIP_BPW;
+ put_unaligned_be16(fip->lp->vlan, &frame->vlan.fd_vlan);
+
+ skb_put(skb, len);
+ skb->protocol = htons(ETH_P_FIP);
+ skb->priority = fip->priority;
+ skb_reset_mac_header(skb);
+ skb_reset_network_header(skb);
+
+ fip->send(fip, skb);
+}
+
+/**
+ * fcoe_ctlr_vlan_disk_reply() - send FIP VLAN Discovery Notification.
+ * @fip: The FCoE controller
+ *
+ * Called with ctlr_mutex held.
+ */
+static void fcoe_ctlr_vlan_disc_reply(struct fcoe_ctlr *fip,
+ struct fc_rport_priv *rdata)
+{
+ struct fcoe_rport *frport = fcoe_ctlr_rport(rdata);
+ enum fip_vlan_subcode sub = FIP_SC_VL_NOTE;
+
+ if (fip->mode == FIP_MODE_VN2VN)
+ sub = FIP_SC_VL_VN2VN_NOTE;
+
+ fcoe_ctlr_vlan_send(fip, sub, frport->enode_mac);
+}
+
+/**
+ * fcoe_ctlr_vlan_recv - vlan request receive handler for VN2VN mode.
+ * @lport: The local port
+ * @fp: The received frame
+ *
+ */
+static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *fip, struct sk_buff *skb)
+{
+ struct fip_header *fiph;
+ enum fip_vlan_subcode sub;
+ struct {
+ struct fc_rport_priv rdata;
+ struct fcoe_rport frport;
+ } buf;
+ int rc;
+
+ fiph = (struct fip_header *)skb->data;
+ sub = fiph->fip_subcode;
+ rc = fcoe_ctlr_vlan_parse(fip, skb, &buf.rdata);
+ if (rc) {
+ LIBFCOE_FIP_DBG(fip, "vlan_recv vlan_parse error %d\n", rc);
+ goto drop;
+ }
+ mutex_lock(&fip->ctlr_mutex);
+ if (sub == FIP_SC_VL_REQ)
+ fcoe_ctlr_vlan_disc_reply(fip, &buf.rdata);
+ mutex_unlock(&fip->ctlr_mutex);
+
+drop:
+ kfree(skb);
+ return rc;
+}
+
+/**
* fcoe_ctlr_disc_recv - discovery receive handler for VN2VN mode.
* @lport: The local port
* @fp: The received frame
diff --git a/drivers/scsi/fcoe/fcoe_sysfs.c b/drivers/scsi/fcoe/fcoe_sysfs.c
index 045c4e1..0675fd1 100644
--- a/drivers/scsi/fcoe/fcoe_sysfs.c
+++ b/drivers/scsi/fcoe/fcoe_sysfs.c
@@ -385,6 +385,44 @@ static FCOE_DEVICE_ATTR(ctlr, enabled, S_IRUGO | S_IWUSR,
show_ctlr_enabled_state,
store_ctlr_enabled);
+static ssize_t store_ctlr_fip_resp(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct fcoe_ctlr_device *ctlr = dev_to_ctlr(dev);
+ struct fcoe_ctlr *fip = fcoe_ctlr_device_priv(ctlr);
+
+ mutex_lock(&fip->ctlr_mutex);
+ if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
+ if (buf[0] == '1') {
+ fip->fip_resp = 1;
+ mutex_unlock(&fip->ctlr_mutex);
+ return count;
+ }
+ if (buf[0] == '0') {
+ fip->fip_resp = 0;
+ mutex_unlock(&fip->ctlr_mutex);
+ return count;
+ }
+ }
+ mutex_unlock(&fip->ctlr_mutex);
+ return -EINVAL;
+}
+
+static ssize_t show_ctlr_fip_resp(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct fcoe_ctlr_device *ctlr = dev_to_ctlr(dev);
+ struct fcoe_ctlr *fip = fcoe_ctlr_device_priv(ctlr);
+
+ return sprintf(buf, "%d\n", fip->fip_resp ? 1 : 0);
+}
+
+static FCOE_DEVICE_ATTR(ctlr, fip_vlan_responder, S_IRUGO | S_IWUSR,
+ show_ctlr_fip_resp,
+ store_ctlr_fip_resp);
+
static ssize_t
store_private_fcoe_ctlr_fcf_dev_loss_tmo(struct device *dev,
struct device_attribute *attr,
@@ -467,6 +505,7 @@ static struct attribute_group fcoe_ctlr_lesb_attr_group = {
};
static struct attribute *fcoe_ctlr_attrs[] = {
+ &device_attr_fcoe_ctlr_fip_vlan_responder.attr,
&device_attr_fcoe_ctlr_fcf_dev_loss_tmo.attr,
&device_attr_fcoe_ctlr_enabled.attr,
&device_attr_fcoe_ctlr_mode.attr,
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 93d14da..7428a53 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -878,6 +878,7 @@ struct fc_lport {
struct libfc_function_template tt;
u8 link_up;
u8 qfull;
+ u16 vlan;
enum fc_lport_state state;
unsigned long boot_time;
struct fc_host_statistics host_stats;
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index bcc5c3e..722d326 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
@@ -110,8 +110,10 @@ enum fip_mode {
* @flogi_req_send: send of FLOGI requested
* @flogi_count: number of FLOGI attempts in AUTO mode.
* @map_dest: use the FC_MAP mode for destination MAC addresses.
+ * @fip_resp: start FIP VLAN discovery responder
* @spma: supports SPMA server-provided MACs mode
* @probe_tries: number of FC_IDs probed
+ * @priority: DCBx FCoE APP priority
* @dest_addr: MAC address of the selected FC forwarder.
* @ctl_src_addr: the native MAC address of our local port.
* @send: LLD-supplied function to handle sending FIP Ethernet frames
@@ -149,7 +151,8 @@ struct fcoe_ctlr {
u16 flogi_oxid;
u8 flogi_req_send;
u8 flogi_count;
- u8 map_dest;
+ bool map_dest;
+ bool fip_resp;
u8 spma;
u8 probe_tries;
u8 priority;
--
1.8.5.6
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
` (4 preceding siblings ...)
2016-07-04 8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
@ 2016-07-04 8:29 ` Hannes Reinecke
2016-07-04 10:18 ` Johannes Thumshirn
2016-07-25 7:32 ` Johannes Thumshirn
2016-07-14 2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
6 siblings, 2 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 8:29 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
linux-scsi, Hannes Reinecke, Hannes Reinecke
FC-BB-6 states:
FIP protocols shall be performed on a per-VLAN basis. It is
recommended to use the FIP VLAN discovery protocol on the
default VLAN.
Signed-off-by: Hannes Reinecke <hare@suse.com>
---
drivers/scsi/fcoe/fcoe.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-
drivers/scsi/fcoe/fcoe.h | 1 +
2 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index c8a4305..197dc62 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -92,6 +92,8 @@ static struct fcoe_interface
static int fcoe_fip_recv(struct sk_buff *, struct net_device *,
struct packet_type *, struct net_device *);
+static int fcoe_fip_vlan_recv(struct sk_buff *, struct net_device *,
+ struct packet_type *, struct net_device *);
static void fcoe_fip_send(struct fcoe_ctlr *, struct sk_buff *);
static void fcoe_update_src_mac(struct fc_lport *, u8 *);
@@ -363,6 +365,12 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
fcoe->fip_packet_type.dev = netdev;
dev_add_pack(&fcoe->fip_packet_type);
+ if (netdev != real_dev) {
+ fcoe->fip_vlan_packet_type.func = fcoe_fip_vlan_recv;
+ fcoe->fip_vlan_packet_type.type = htons(ETH_P_FIP);
+ fcoe->fip_vlan_packet_type.dev = real_dev;
+ dev_add_pack(&fcoe->fip_vlan_packet_type);
+ }
return 0;
}
@@ -450,6 +458,8 @@ static void fcoe_interface_remove(struct fcoe_interface *fcoe)
*/
__dev_remove_pack(&fcoe->fcoe_packet_type);
__dev_remove_pack(&fcoe->fip_packet_type);
+ if (netdev != fcoe->realdev)
+ __dev_remove_pack(&fcoe->fip_vlan_packet_type);
synchronize_net();
/* Delete secondary MAC addresses */
@@ -520,6 +530,29 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev,
}
/**
+ * fcoe_fip_vlan_recv() - Handler for received FIP VLAN discovery frames
+ * @skb: The receive skb
+ * @netdev: The associated net device
+ * @ptype: The packet_type structure which was used to register this handler
+ * @orig_dev: The original net_device the the skb was received on.
+ * (in case dev is a bond)
+ *
+ * Returns: 0 for success
+ */
+static int fcoe_fip_vlan_recv(struct sk_buff *skb, struct net_device *netdev,
+ struct packet_type *ptype,
+ struct net_device *orig_dev)
+{
+ struct fcoe_interface *fcoe;
+ struct fcoe_ctlr *ctlr;
+
+ fcoe = container_of(ptype, struct fcoe_interface, fip_vlan_packet_type);
+ ctlr = fcoe_to_ctlr(fcoe);
+ fcoe_ctlr_recv(ctlr, skb);
+ return 0;
+}
+
+/**
* fcoe_port_send() - Send an Ethernet-encapsulated FIP/FCoE frame
* @port: The FCoE port
* @skb: The FIP/FCoE packet to be sent
@@ -539,7 +572,21 @@ static void fcoe_port_send(struct fcoe_port *port, struct sk_buff *skb)
*/
static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
{
- skb->dev = fcoe_from_ctlr(fip)->netdev;
+ struct fcoe_interface *fcoe = fcoe_from_ctlr(fip);
+ struct fip_frame {
+ struct ethhdr eth;
+ struct fip_header fip;
+ } __packed *frame;
+
+ /*
+ * Use default VLAN for FIP VLAN discovery protocol
+ */
+ frame = (struct fip_frame *)skb->data;
+ if (frame->fip.fip_op == ntohs(FIP_OP_VLAN) &&
+ fcoe->realdev != fcoe->netdev)
+ skb->dev = fcoe->realdev;
+ else
+ skb->dev = fcoe->netdev;
fcoe_port_send(lport_priv(fip->lp), skb);
}
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h
index 2b53672..6aa4820 100644
--- a/drivers/scsi/fcoe/fcoe.h
+++ b/drivers/scsi/fcoe/fcoe.h
@@ -80,6 +80,7 @@ struct fcoe_interface {
struct net_device *realdev;
struct packet_type fcoe_packet_type;
struct packet_type fip_packet_type;
+ struct packet_type fip_vlan_packet_type;
struct fc_exch_mgr *oem;
u8 removed;
u8 priority;
--
1.8.5.6
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 5/6] fcoe: implement FIP VLAN responder
2016-07-04 8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
@ 2016-07-04 10:05 ` Johannes Thumshirn
2016-07-04 11:22 ` Hannes Reinecke
2016-07-25 7:31 ` Johannes Thumshirn
1 sibling, 1 reply; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:05 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:22AM +0200, Hannes Reinecke wrote:
> When running in VN2VN mode there is no central instance which
> would send out any FIP VLAN discovery notifications. So this
> patch adds a new sysfs attribute 'fip_vlan_responder' which
> will activate a FIP VLAN discovery responder.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
> ---
[...]
> +/**
> + * fcoe_ctlr_vlan_send() - Send a FIP VLAN Notification
> + * @fip: The FCoE controller
> + * @sub: sub-opcode for vlan notification or vn2vn vlan notification
> + * @dest: The destination Ethernet MAC address
> + * @min_len: minimum size of the Ethernet payload to be sent
> + */
> +static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
> + enum fip_vlan_subcode sub,
> + const u8 *dest)
> +{
> + struct sk_buff *skb;
> + struct fip_frame {
> + struct ethhdr eth;
> + struct fip_header fip;
> + struct fip_mac_desc mac;
> + struct fip_vlan_desc vlan;
> + } __packed * frame;
Hmmm this is the 2nd time fip_frame is defined in fcoe_ctlr.c. I'd prefere
having the type definition somewhere else in this file and then use it in
fcoe_ctlr_vlan_send() and fcoe_ctlr_vn_send().
> + size_t len;
> + size_t dlen;
> +
> + len = sizeof(*frame);
> + dlen = sizeof(frame->mac) + sizeof(frame->vlan);
> + len = max(len, sizeof(struct ethhdr));
> +
> + skb = dev_alloc_skb(len);
> + if (!skb)
> + return;
dev_alloc_skb() uses GFP_ATOMIC so it's actually not unlikely to fail
so please return -ENOMEM here, just so the caller knows what happened.
> +
> + LIBFCOE_FIP_DBG(fip, "fip %s vlan notification, vlan %d\n",
> + fip->mode == FIP_MODE_VN2VN ? "vn2vn" : "fcf",
> + fip->lp->vlan);
> +
> + frame = (struct fip_frame *)skb->data;
> + memset(frame, 0, len);
> + memcpy(frame->eth.h_dest, dest, ETH_ALEN);
> +
> + memcpy(frame->eth.h_source, fip->ctl_src_addr, ETH_ALEN);
> + frame->eth.h_proto = htons(ETH_P_FIP);
> +
> + frame->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
> + frame->fip.fip_op = htons(FIP_OP_VLAN);
> + frame->fip.fip_subcode = sub;
> + frame->fip.fip_dl_len = htons(dlen / FIP_BPW);
> +
> + frame->mac.fd_desc.fip_dtype = FIP_DT_MAC;
> + frame->mac.fd_desc.fip_dlen = sizeof(frame->mac) / FIP_BPW;
> + memcpy(frame->mac.fd_mac, fip->ctl_src_addr, ETH_ALEN);
> +
> + frame->vlan.fd_desc.fip_dtype = FIP_DT_VLAN;
> + frame->vlan.fd_desc.fip_dlen = sizeof(frame->vlan) / FIP_BPW;
> + put_unaligned_be16(fip->lp->vlan, &frame->vlan.fd_vlan);
> +
> + skb_put(skb, len);
> + skb->protocol = htons(ETH_P_FIP);
> + skb->priority = fip->priority;
> + skb_reset_mac_header(skb);
> + skb_reset_network_header(skb);
> +
> + fip->send(fip, skb);
> +}
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft
2016-07-04 8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
@ 2016-07-04 10:12 ` Johannes Thumshirn
0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:12 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:18AM +0200, Hannes Reinecke wrote:
> Update to latest FC-BB-6 draft to include FIP VN2VN VLAN notifications
> and additional flags.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Acked-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/6] fcoe: use enum for fip_mode
2016-07-04 8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
@ 2016-07-04 10:15 ` Johannes Thumshirn
0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:15 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:19AM +0200, Hannes Reinecke wrote:
> The FIP mode is independent on the FIP state machine, so use a
> separate enum for that instead of overloading it with state
> machine values.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Acked-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/6] fcoe: fcoe->realdev is always set
2016-07-04 8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
@ 2016-07-04 10:16 ` Johannes Thumshirn
0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:16 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:20AM +0200, Hannes Reinecke wrote:
> '->realdev' is always set, so this check is pointless.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Acked-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change
2016-07-04 8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
@ 2016-07-04 10:16 ` Johannes Thumshirn
0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:16 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:21AM +0200, Hannes Reinecke wrote:
> When the FIP mode is changed we need to update the multicast
> addresses to ensure we get the correct frames.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Acked-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery
2016-07-04 8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
@ 2016-07-04 10:18 ` Johannes Thumshirn
2016-07-25 7:32 ` Johannes Thumshirn
1 sibling, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:18 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:23AM +0200, Hannes Reinecke wrote:
> FC-BB-6 states:
> FIP protocols shall be performed on a per-VLAN basis. It is
> recommended to use the FIP VLAN discovery protocol on the
> default VLAN.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Given the removal of the duplicate fip_frame struct defition:
Acked-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 5/6] fcoe: implement FIP VLAN responder
2016-07-04 10:05 ` Johannes Thumshirn
@ 2016-07-04 11:22 ` Hannes Reinecke
0 siblings, 0 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 11:22 UTC (permalink / raw)
To: Johannes Thumshirn, Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi
On 07/04/2016 12:05 PM, Johannes Thumshirn wrote:
> On Mon, Jul 04, 2016 at 10:29:22AM +0200, Hannes Reinecke wrote:
>> When running in VN2VN mode there is no central instance which
>> would send out any FIP VLAN discovery notifications. So this
>> patch adds a new sysfs attribute 'fip_vlan_responder' which
>> will activate a FIP VLAN discovery responder.
>>
>> Signed-off-by: Hannes Reinecke <hare@suse.com>
>> ---
>
> [...]
>
>> +/**
>> + * fcoe_ctlr_vlan_send() - Send a FIP VLAN Notification
>> + * @fip: The FCoE controller
>> + * @sub: sub-opcode for vlan notification or vn2vn vlan notification
>> + * @dest: The destination Ethernet MAC address
>> + * @min_len: minimum size of the Ethernet payload to be sent
>> + */
>> +static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
>> + enum fip_vlan_subcode sub,
>> + const u8 *dest)
>> +{
>> + struct sk_buff *skb;
>> + struct fip_frame {
>> + struct ethhdr eth;
>> + struct fip_header fip;
>> + struct fip_mac_desc mac;
>> + struct fip_vlan_desc vlan;
>> + } __packed * frame;
>
> Hmmm this is the 2nd time fip_frame is defined in fcoe_ctlr.c. I'd prefere
> having the type definition somewhere else in this file and then use it in
> fcoe_ctlr_vlan_send() and fcoe_ctlr_vn_send().
>
This appears to be the convention in the file; every function which is
sending a frame on the wire defines a local variable 'struct fip_frame'
which contains the actual frame definition.
Might be that the style can be improved, but that should be a separate
patch.
>> + size_t len;
>> + size_t dlen;
>> +
>> + len = sizeof(*frame);
>> + dlen = sizeof(frame->mac) + sizeof(frame->vlan);
>> + len = max(len, sizeof(struct ethhdr));
>> +
>> + skb = dev_alloc_skb(len);
>> + if (!skb)
>> + return;
>
> dev_alloc_skb() uses GFP_ATOMIC so it's actually not unlikely to fail
> so please return -ENOMEM here, just so the caller knows what happened.
>
Again, the calling convention of fcoe_ctlr_send_vlan() insists on using
a void return.
Yes, this should be improved, but again with another patch.
So do I need to send two additional patches for updating the infrastructure?
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare@suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
` (5 preceding siblings ...)
2016-07-04 8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
@ 2016-07-14 2:11 ` Martin K. Petersen
2016-07-25 7:34 ` Johannes Thumshirn
6 siblings, 1 reply; 20+ messages in thread
From: Martin K. Petersen @ 2016-07-14 2:11 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi
>>>>> "Hannes" == Hannes Reinecke <hare@suse.de> writes:
Hannes> Hi all, When setting up a VN2VN FCoE target there is no real
Hannes> need to run fcoeadm, especially if DCB is disabled. So this
Hannes> patchset implements a VIP VLAN responder which can be enabled by
Hannes> writing to the sysfs attribute 'fip_vlan_responder'.
Hannes> Additionally there are some fixes for VN2VN mode, most notably
Hannes> the multicast address update when changing modes.
Applied patches 1-4 to 4.8/scsi-queue.
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 5/6] fcoe: implement FIP VLAN responder
2016-07-04 8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
2016-07-04 10:05 ` Johannes Thumshirn
@ 2016-07-25 7:31 ` Johannes Thumshirn
1 sibling, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-25 7:31 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:22AM +0200, Hannes Reinecke wrote:
> When running in VN2VN mode there is no central instance which
> would send out any FIP VLAN discovery notifications. So this
> patch adds a new sysfs attribute 'fip_vlan_responder' which
> will activate a FIP VLAN discovery responder.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery
2016-07-04 8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
2016-07-04 10:18 ` Johannes Thumshirn
@ 2016-07-25 7:32 ` Johannes Thumshirn
1 sibling, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-25 7:32 UTC (permalink / raw)
To: Hannes Reinecke
Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi, Hannes Reinecke
On Mon, Jul 04, 2016 at 10:29:23AM +0200, Hannes Reinecke wrote:
> FC-BB-6 states:
> FIP protocols shall be performed on a per-VLAN basis. It is
> recommended to use the FIP VLAN discovery protocol on the
> default VLAN.
>
> Signed-off-by: Hannes Reinecke <hare@suse.com>
Acked-by: Johannes Thumshirn <jth@kernel.org>
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
2016-07-14 2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
@ 2016-07-25 7:34 ` Johannes Thumshirn
2016-07-27 4:26 ` Martin K. Petersen
0 siblings, 1 reply; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-25 7:34 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Hannes Reinecke, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi
On Wed, Jul 13, 2016 at 10:11:33PM -0400, Martin K . Petersen wrote:
> >>>>> "Hannes" == Hannes Reinecke <hare@suse.de> writes:
>
> Hannes> Hi all, When setting up a VN2VN FCoE target there is no real
> Hannes> need to run fcoeadm, especially if DCB is disabled. So this
> Hannes> patchset implements a VIP VLAN responder which can be enabled by
> Hannes> writing to the sysfs attribute 'fip_vlan_responder'.
> Hannes> Additionally there are some fixes for VN2VN mode, most notably
> Hannes> the multicast address update when changing modes.
>
> Applied patches 1-4 to 4.8/scsi-queue.
Hi Martin,
I've now Acked patches 5 and 6 as well, Hannes' answers clarified my concerns.
Can you pick 'em up for 4.8 as well?
Thanks,
Johannes
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
2016-07-25 7:34 ` Johannes Thumshirn
@ 2016-07-27 4:26 ` Martin K. Petersen
2016-07-27 7:23 ` Johannes Thumshirn
0 siblings, 1 reply; 20+ messages in thread
From: Martin K. Petersen @ 2016-07-27 4:26 UTC (permalink / raw)
To: Johannes Thumshirn
Cc: Martin K. Petersen, Hannes Reinecke, Johannes Thumshirn,
Christoph Hellwig, James Bottomley, linux-scsi
>>>>> "Johannes" == Johannes Thumshirn <jthumshirn@suse.de> writes:
Johannes> I've now Acked patches 5 and 6 as well, Hannes' answers
Johannes> clarified my concerns. Can you pick 'em up for 4.8 as well?
Done!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
2016-07-27 4:26 ` Martin K. Petersen
@ 2016-07-27 7:23 ` Johannes Thumshirn
0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-27 7:23 UTC (permalink / raw)
To: Martin K. Petersen
Cc: Hannes Reinecke, Johannes Thumshirn, Christoph Hellwig,
James Bottomley, linux-scsi
On Wed, Jul 27, 2016 at 12:26:38AM -0400, Martin K . Petersen wrote:
> >>>>> "Johannes" == Johannes Thumshirn <jthumshirn@suse.de> writes:
>
> Johannes> I've now Acked patches 5 and 6 as well, Hannes' answers
> Johannes> clarified my concerns. Can you pick 'em up for 4.8 as well?
>
> Done!
Thanks a lot.
--
Johannes Thumshirn Storage
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2016-07-27 7:23 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-04 8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
2016-07-04 8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
2016-07-04 10:12 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
2016-07-04 10:15 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
2016-07-04 10:16 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
2016-07-04 10:16 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
2016-07-04 10:05 ` Johannes Thumshirn
2016-07-04 11:22 ` Hannes Reinecke
2016-07-25 7:31 ` Johannes Thumshirn
2016-07-04 8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
2016-07-04 10:18 ` Johannes Thumshirn
2016-07-25 7:32 ` Johannes Thumshirn
2016-07-14 2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
2016-07-25 7:34 ` Johannes Thumshirn
2016-07-27 4:26 ` Martin K. Petersen
2016-07-27 7:23 ` Johannes Thumshirn
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.