[SCSI] fcoe: Fix using VLAN ID in creating lport's WWWN/WWPN
authorYi Zou <yi.zou@intel.com>
Tue, 3 Nov 2009 19:49:59 +0000 (11:49 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 4 Dec 2009 18:01:24 +0000 (12:01 -0600)
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>
drivers/scsi/fcoe/fcoe.c

index fba7ba00c71bbcd0b53e0ca328a02ed0c8ce8337..28029a342892c9ec9a30b1be5b9f8f15785d7d08 100644 (file)
@@ -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);
        }