diff options
author | Yi Zou <yi.zou@intel.com> | 2009-11-03 20:49:59 +0100 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-04 19:01:24 +0100 |
commit | cc0136c2e9c10e889cb36e39710c0eb10707b396 (patch) | |
tree | b486a0e899ee7d06365f3efbe1e08c876b91b422 /drivers/scsi/fcoe | |
parent | [SCSI] libfc: do not use DID_NO_CONNECT for pkt alloc failures. (diff) | |
download | linux-cc0136c2e9c10e889cb36e39710c0eb10707b396.tar.xz linux-cc0136c2e9c10e889cb36e39710c0eb10707b396.zip |
[SCSI] fcoe: Fix using VLAN ID in creating lport's WWWN/WWPN
If the underlying netdev is a VLAN device, make sure the VLAN ID is integrated
into the WWNN/WWPN name generation. Also added/updated the comments to reflect
this change.
Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/fcoe')
-rw-r--r-- | drivers/scsi/fcoe/fcoe.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c index fba7ba00c71b..28029a342892 100644 --- a/drivers/scsi/fcoe/fcoe.c +++ b/drivers/scsi/fcoe/fcoe.c @@ -555,6 +555,7 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev) u64 wwnn, wwpn; struct fcoe_interface *fcoe; struct fcoe_port *port; + int vid = 0; /* Setup lport private data to point to fcoe softc */ port = lport_priv(lport); @@ -599,10 +600,16 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev) setup_timer(&port->timer, fcoe_queue_timer, (unsigned long)lport); if (!lport->vport) { + /* + * Use NAA 1&2 (FC-FS Rev. 2.0, Sec. 15) to generate WWNN/WWPN: + * For WWNN, we use NAA 1 w/ bit 27-16 of word 0 as 0. + * For WWPN, we use NAA 2 w/ bit 27-16 of word 0 from VLAN ID + */ + if (netdev->priv_flags & IFF_802_1Q_VLAN) + vid = vlan_dev_vlan_id(netdev); wwnn = fcoe_wwn_from_mac(fcoe->ctlr.ctl_src_addr, 1, 0); fc_set_wwnn(lport, wwnn); - /* XXX - 3rd arg needs to be vlan id */ - wwpn = fcoe_wwn_from_mac(fcoe->ctlr.ctl_src_addr, 2, 0); + wwpn = fcoe_wwn_from_mac(fcoe->ctlr.ctl_src_addr, 2, vid); fc_set_wwpn(lport, wwpn); } |