scsi: fcoe: correct sending FIP VLAN packets on VLAN 0
authorHannes Reinecke <hare@suse.de>
Thu, 13 Oct 2016 13:10:59 +0000 (15:10 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 8 Nov 2016 22:29:53 +0000 (17:29 -0500)
The FIP VLAN frame consists of an ethernet header followed
by the FIP VLAN frame, so we need to skip the ethernet header
if we want to check the FIP opcode.

Signed-off-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/fcoe/fcoe.c

index 9876fca8946a3aceaa3f41c52bfac365606d0099..cf4adaafd6682d4e9ac257a1377a183685bfda10 100644 (file)
@@ -590,7 +590,8 @@ static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
         * Use default VLAN for FIP VLAN discovery protocol
         */
        frame = (struct fip_frame *)skb->data;
-       if (frame->fip.fip_op == ntohs(FIP_OP_VLAN) &&
+       if (ntohs(frame->eth.h_proto) == ETH_P_FIP &&
+           ntohs(frame->fip.fip_op) == FIP_OP_VLAN &&
            fcoe->realdev != fcoe->netdev)
                skb->dev = fcoe->realdev;
        else